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.
分析:
采用中心扩展法,每个字符都有可能是回文字符串的中点。依次求得各字符作为中心的回文字符串,取其中最长的那个即可。
注意到回文字符串分为奇、偶两种类型对应“aba”和“aa”,所以每个字符都要求两次回文字符。
代码如下:
class Solution {
public:
string str_helper(string s, int left, int right)
{
int n = s.length();
while(left>=0 && right<=n-1 && s[left]==s[right]){
left--;
right++;
}
return s.substr(left+1, right-left-1);
}
string longestPalindrome(string s) {
if(s.length() <= 1)
return s;
string longest = s.substr(0,1);
for (int i=0; i<s.length(); i++){
string tmp = str_helper(s, i, i);
if (tmp.length() > longest.length()) {
longest = tmp;
}
tmp = str_helper(s, i, i+1);
if (tmp.length() > longest.length()) {
longest = tmp;
}
}
return longest;
}
};

本文介绍了一种使用中心扩展法查找给定字符串中最长回文子串的有效算法。通过迭代每个字符作为潜在的回文中心,分别考虑奇数长度和偶数长度的回文情况,从而找到最长的回文子串。
548

被折叠的 条评论
为什么被折叠?



