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); } };