原题:
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"
就是求最长回文子串,我的方法是设置l指针和r指针,在以某一位或某两位字符为中心字符向外扩散,碰到不同的就停止,记录最大值,最后返回最大值就行,结果:
Success
Runtime: 12 ms, faster than 88.08% of C++ online submissions for Longest Palindromic Substring.
Memory Usage: 8.6 MB, less than 100.00% of C++ online submissions for Longest Palindromic Substring.
代码:
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty()){return "";}
int maxl=0;
int maxr=-1;
for(int i=0;i<s.size();i++){
int l=i;
int r=i;
while(l>=0&&r<s.size()&&s[l]==s[r]){
l--;r++;
}
if(r-l>maxr-maxl){maxl=l;maxr=r;}
if(s[i+1]==s[i]){l=i;r=i+1;}
while(l>=0&&r<s.size()&&s[l]==s[r]){
l--;r++;
}
if(r-l>maxr-maxl){maxl=l;maxr=r;}
}
return s.substr(maxl+1,maxr-maxl-1);
}
};
这个应该是approach中的第四个,第一个是求出与反向字符串的最长公共子串,第二个是暴力解法,第三个是动态规划,思路和我这个是一个意思但是会浪费很多存储空间。