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"给定一个字符串s,判断最长回文子串。
参考了点击打开链接博主的做法,博主介绍了好几种做法,我只实现了比较容易的一个。
从头到尾遍历字符串s,以每个字符或两个字符为中心(回文有奇数和偶数)向两侧每次扩展一个位置,判断左右两侧的字符是否相同,由此记录中心形成的最长回文。
对每个中心形成的最长回文记录最长的。
class Solution {
public:
string centerJudge(string s, int left, int right){
string str = "";
//以一个字母或两个相同字母做中心,向两侧每次延伸一个字母,判断是否想同
while(s[left] == s[right] && left >= 0 && right < s.size()){
left --;
right ++;
}
str = s.substr(left + 1, right - left - 1);//substr(off, count)函数,off为起始位置,count为字符串长度
//cout<<left<<" "<<right << " " <<str<<endl;
return str;
}
string longestPalindrome(string s) {
int n = s.size();
string longest = "";
string ans = "";
int maxlength = 0;
for(int i = 0; i < n; i ++){
longest = centerJudge(s, i, i);//一个字母为中心
if(longest.size() > maxlength){
maxlength = longest.size();
ans = longest;
}
longest = centerJudge(s, i, i + 1);//两个相同字母为中心
if(longest.size() > maxlength){
maxlength = longest.size();
ans = longest;
}
}
return ans;
}
};
注:substr(off, count)函数,off为起始位置,count为字符串长度