Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
思路:顺序遍历一遍字符串,以每一个字符为中心向两侧展开,以此求得最大回文子串,需要注意的是,考虑回文字串的长度为奇数还是偶数,以及字符重复的情况,代码如下:
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty() || s == "")
return "";
int len = s.length();
if(len == 1)
return s;
int i, maxLen = 1, j, k, localLen;
string ret = "";
for(i = 1; i < len; ++i){
localLen = 1;
//遇到字符相同的情况
while(i < len && s[i] == s[i-1]){
localLen ++;
i++;
}
//计算会回文串两端边界位置
j = i - localLen - 1;
k = i;
while(j >= 0 && k < len){//扩大回文串
if(s[j] == s[k]){
localLen += 2;
j--;
k++;
}
else{
if(localLen > maxLen){
maxLen = localLen;
ret = s.substr(j + 1,k - j - 1);
}
break;
}
}
//k到头了,但是回文串还没有比较
if(localLen > maxLen){
maxLen = localLen;
ret = s.substr(j + 1,k - j - 1);
}
}
return ret;
}
};
上述算法的时间复杂度时O(n2),查阅相关资料发现该问题的解法有很多种,具体见最大回文子串。