求最长回文字串,本来可以用动态规划做。我选取的是从中间往两边扩的方法,分为奇数和偶数两种情况。奇数就是从一个字符的左右边开始扩,偶数是从两个字符间开始往两边扩,所以分为两种情况。然后记录最长的长度,通过子串函数返回所求子串。上代码。
class Solution {
public:
string longestPalindrome(string s) {
int j=0,maxlen=0;string t;
if(s.size()<=1) return s;
for(int k=1;k<s.size();k++){
int low=k-1,high=k+1;
while(low>=0&&high<s.size()&&s[low]==s[high]){
low--;high++;
if(high-low-1>maxlen){
maxlen=high-low-1;
j=low+1;
}
}
low=k-1;high=k;
while(low>=0&&high<s.size()&&s[low]==s[high]){
low--;high++;
if(high-low-1>maxlen){
maxlen=high-low-1;
j=low+1;
}
}
}
t=s.substr(j,maxlen);
return t;
}
};