Description:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
判断最大回文子字符串。
一.暴力破解(超时)
class Solution {
public:
string longestPalindrome(string s) {
if(s.length()==1)
return s;
int i=0, j=0;
int maxLength = 0;
string maxLongStr = "";
string SubStr = "";
for(i=0;i<s.length();i++){
for(j=i+1;j<s.length();j++){
if(s[j]==s[i]){
int left=i,right=j;
while(s[left]==s[right] && left<=right){
left++;right--;
}
if(right-left<0){
SubStr = s.substr(i, j-i+1);
if(SubStr.length()>maxLongStr.length())
maxLongStr = SubStr;
}
else{
string tem = "";
SubStr = tem+s[i];
if(SubStr.length()>maxLongStr.length())
maxLongStr = SubStr;
}
}
}
}
return maxLongStr;
}
};
最后输入:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入有些变态,但是这个输入在我自己的电脑上用vs可以跑起来,但是提交到LeetCode上提示超时。
换一种方法,从中间向两边查找,中心可能是一个元素,也可以是两个重复元素,例如aba和abba都是回文。这种方法是O(n^2),提交后运行时间可以通过。
class Solution {
public:
string longestPalindrome(string s) {
if(s.length() == 1)
return s;
string tem="", maxSubStr="";
for(int i=0; i<s.length(); i++){
tem = getPlength(s,i,i);
if(tem.length() > maxSubStr.length()){
maxSubStr = tem;
}
if(i != s.length()-1){
tem = getPlength(s,i,i+1);
if(tem.length() > maxSubStr.length()){
maxSubStr = tem;
}
}
}
return maxSubStr;
}
string getPlength(string s, int left, int right){
while(left>=0 && right<s.length() && s[left]==s[right]){
left--;right++;
}
return s.substr(left+1,right-1-(left+1)+1);
}
};