题目:Given a string s, find thelongest palindromic substring in s. You may assume that the maximumlength of s is 1000.
Example:
Input:"babad"
Output:"bab"
Note:"aba" is also a valid answer.
Example:
Input:"cbbd"
Output:"bb"
class Solution {
public:
string longestPalindrome(string s) {
}
};
对于找到一个字符串中最长的回文字符串方法如下:
1、 若回文字符串的长度大于等于3,则有:回文字符串中连续三个元素左中右,左边=右边,当找到左边等于右边后,这时左边的索引left_index--,右边的索引right_index++,接着判断索引对应的值,如果相等则继续left_index--,right_index++,然后比较,如果不等,则跳出循环记录此刻的回文字符串的长度,maxlen=right_index-left_index;
2、 若有两个及以上相同字母组成的字符串,这也要考虑,判断是否s[i]==s[i+1],简单的写个while循环;记录max_len数据;
3、 这里有几种情况说明:
A、如果字符串的长度为1则返回s;
B、如果字符串为空,则返回-1;
具体程序如下:string longestPalindrome(string s) {
if (s.empty()) return "";
if (s.size() == 1) return s;
int min_start = 0, max_len = 1;
for (int i = 0; i < s.size();) {
if (s.size() - i <= max_len / 2) break;
int left_index = i, right_index = i;
//相同字符组成的回文字符串判断
while (right_index < s.size() - 1 && s[right_index + 1] == s[right_index])
++right_index;
i = right_index + 1;
while (right_index < s.size() - 1 && left_index > 0 && s[right_index + 1] == s[left_index - 1])
{
// 长度为3及以上的回文字符串的判断
++right_index; --left_index;
}
int new_len = right_index - left_index + 1;
if (new_len > max_len) { min_start = left_index; max_len = new_len; }
}
return s.substr(min_start, max_len);
}