最长回文字串的提取

来源:互联网 发布:spring mvc js国际化 编辑:程序博客网 时间:2024/05/22 13:46
#include <iostream>#include <string>using namespace std;class Solution {public:string longestPalindrome(string s) {if (s.empty() || s.size() == 1)return s;int minStart = 0;int maxlength = 0;int i = 0;//while (i < s.size())for (; i < s.size();){if (maxlength / 2 >= s.size() - i)break;//记录头与尾下标int pStart = i, pEnd = i;//跳过所有相同元素,注意到,如果从当前位置开始没有连续相同的元素,则pStart == pEnd;while (pEnd < s.size()-1 && s[pEnd] == s[pEnd+1])++pEnd;//更新 ii = pEnd + 1;//只能在此更新i的值,而不是用下面的pEnd去更新i的值,因为后面可能还有更长的回文//扩展回文while (pStart > 0 && pEnd < s.size()-1 && s[pStart-1] == s[pEnd+1]){++pEnd;--pStart;}//计算新的长度int newLength = pEnd - pStart + 1;if (newLength > maxlength){maxlength = newLength;minStart = pStart;}}return s.substr(minStart, maxlength);}};int main(){string s("eabcb");Solution solu;cout << solu.longestPalindrome(s) << endl;system("pause");return 0;}

1 0