Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
思路:
1. 中心扩散,分奇数偶数两种情况,复杂度O(n^2)
class Solution {
public:
string longestPalindrome(string s) {
int max_len = 1;
int jl,jr,i,spos=0;
if(s.length() < 2) return s;
for(i=0;i<s.length();i++)
{
jl=i-1;jr=i+1;
while(jl>=0 && jr<s.length()&& s[jl]==s[jr])
{
if(jr-jl+1>max_len)
{
max_len = jr-jl+1;
spos = jl;
}
jl--;
jr++;
}
jl=i;jr=i+1;
while(jl>=0 && jr<s.length()&& s[jl]==s[jr])
{
if(jr-jl+1>max_len)
{
max_len = jr-jl+1;
spos = jl;
}
jl--;
jr++;
}
}
return s.substr(spos,max_len);
}
};
2. 同样中心扩散,采取跳过重复字符串的方法,避免奇数偶数判断,复杂度O(n^2)
class Solution {
public:
string longestPalindrome(string s) {
int max_len = 1;
int k,j,i,spos=0;
if(s.length() < 2) return s;
for(i=0;i<s.length();)
{
k = i; j = i;
while(k>=0 && k<s.length() && s[k]==s[k+1]) k++;
i = k+1;
while(j>=0 && k<s.length() && s[k]==s[j])
{
if(k-j+1>max_len)
{
max_len = k-j+1;
spos = j;
}
j--;
k++;
}
}
return s.substr(spos,max_len);
}
};
3. 马拉车算法,复杂度O(n),等待完成。。。