5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
提示:
-
1 <= s.length <= 1000
-
仅由数字和英文字母(大写和/或小写)组成s
- 我的解题
class Solution {
public:
string longestPalindrome(string s) {
int Maxlen, begin;
int oddMax, odd_begin;
int evenMax, even_begin;
odd_fine(s, oddMax, odd_begin);
even_find(s, evenMax, even_begin);
if(s.length() == 1){
return s.substr(0, 1);
}
if(oddMax > evenMax){
Maxlen = oddMax;
begin = odd_begin;
}
else{
Maxlen = evenMax;
begin = even_begin;
}
return s.substr(begin, Maxlen);
}
void odd_fine(string s, int &Maxlen, int &begin){
int i, j, k;
int slen, len;
slen = s.length();
Maxlen = 1;
begin = 1;
for(i = 1; (slen-i)*2+1 > Maxlen && i < slen - 1; i++){
for(j = i+1, k=i-1; j < slen && k > -1; j++, k--){
if(s[j] == s[k]){
len = j - k + 1;
if(len > Maxlen){
Maxlen = len;
begin = k;
}
}
else{
break;
}
}
}
}
void even_find(string s, int &Maxlen, int &begin){
int i, j, k;
int slen, len;
slen = s.length();
Maxlen = 1;
begin = 1;
for(i = 0; (slen-i-1)*2 > Maxlen && i < slen - 1; i++){
for(j = i+1, k=i; j < slen && k > -1; j++, k--){
if(s[j] == s[k]){
len = j - k +1;
if(len > Maxlen){
Maxlen = len;
begin = k;
}
}
else{
break;
}
}
}
}
};