您的位置:首页 > 其它

leetcode 第5题 Longest Palindromic Substring

2017-12-18 19:11 399 查看
      第5题  Longest Palindromic Substring

参考网址(github):        https://github.com/cy-hello/leetcode_005

一 题目:

Longest Palindromic Substring(最长回文字符子串)

二题目要求:

给定一个字符串,找出最长回文字符子串,给定的字符串长度不超过1000

三 题目分析:

/*

** 回文字符串:左右2边以中间字符为中心对称的字符串

**

** 方法:跟上一题有相似之处 2个指针,用一个指针指向中心的字符,向左右2边移动,根据回文的奇偶性来分2类

*/

四 编写代码:

class Solution {
public:
string longestPalindrome(string s) {

/*    对传进来的字符串进行条件筛选 长度不能是空和小于1也不能大于1000  */

if ( s.size() <= 1 )
{
return s;
}

if ( s.size() > 1000 )
{
return NULL;
}

/*     初始化变量和赋值   */

int string_left              = 0;
int string_right             = 0;
int length_longest_substring = 0;
int string_length            = s.size();
string Longest_Palindromic_Substring;
/*      主题函数    */

for(int i = 1;i < string_length;i++)
{
/*   寻找以i为中心的奇数长度的回文 比如:aa,bb型的  */
string_left  = i - 1;
string_right = i + 1;
while((string_left >= 0) && (string_right < string_length) && (s[string_left] == s[string_right]))
string_left--, string_right++;

if ( length_longest_substring < string_right - string_left -1 )
{
length_longest_substring = string_right - string_left -1;
Longest_Palindromic_Substring = s.substr(string_left+1, length_longest_substring);
}

/*    以i-1,i为中点偶数长度的回文子串  比如:aba,bab型的  */
string_left  = i-1;
string_right = i;
while((string_left >= 0) && (string_right < string_length) && (s[string_left] == s[string_right]))
string_left--, string_right++;

if ( length_longest_substring < string_right - string_left -1 )
{
length_longest_substring = string_right - string_left -1;
Longest_Palindromic_Substring = s.substr(string_left+1, length_longest_substring);
}
}

return Longest_Palindromic_Substring;
}
};


五 提交结果:

击败了73.78的C++代码,如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: