您的位置:首页 > 其它

[Leetcode] Longest Palindromic Substring

2015-03-30 22:04 447 查看
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.

最长回文,对于每一个字符从中间向两边找,注意分奇数与偶数两种情况。总的时间复杂度为O(n^2)。另外Manacher算法复杂度为O(n),Manacher算法好复杂的样子,智商捉急,得好好消化一下。先贴个简单的吧。

class Solution {
public:
int getLPS(const string &s, int idx1, int idx2) {
while (idx1 >= 0 && idx2 < s.length() && s[idx1] == s[idx2]) {
--idx1;
++idx2;
}
return idx2 - idx1 - 1;
}

string longestPalindrome(string s) {
if (s.length() < 2) return s;
int lps = -1, lps1, lps2, pos;
for (int i = 0; i < s.length(); ++i) {
lps1 = getLPS(s, i, i);
lps2 = getLPS(s, i, i + 1);
if (lps1 > lps || lps2 > lps) {
pos = i;
lps = max(lps1, lps2);
}
}
if (lps & 0x1) return s.substr(pos-(lps-1)/2, lps);
else return s.substr(pos-(lps-2)/2, lps);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: