5.最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2:
输入:s = “cbbd” 输出:“bb” 示例 3:
输入:s = “a” 输出:“a” 示例 4:
输入:s = “ac” 输出:“a”
提示:
1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成
一开始没考虑偶数的情况,还用错了 substr
class Solution {
public:
string longestPalindrome(string s) {
int posL;
int posM;
int posR;
int maxLength = 0;
int lengthCache = 0;
string longestString;
for(posM = 0; posM < s.size(); ++posM)
{
posL = posM;
posR = posM;
while(true)
{
if(posL - 1 < 0||posR + 1 > s.size() - 1)
break;
--posL;
++posR;
if(s[posL] != s[posR])
break;
}
lengthCache = posR - posL + 1;
if(maxLength < lengthCache)
{
maxLength = lengthCache;
longestString = s.substr(posL,posR);
}
}
return longestString;
}
};
后来注意到奇偶就好了
class Solution {
public:
string longestPalindrome(string s) {
int posL, posM, posR, maxLength = 0, lengthCache = 0;
string longestString;
for(posM = 0; posM < s.size(); ++posM)
{
posL = posM;
posR = posM;
while(true)
{
if(posL - 1 >= 0 && posR + 1 <= s.size() - 1)
{
if(s[posL - 1] == s[posR + 1])
{
--posL;
++posR;
continue;
}
}
break;
}
lengthCache = posR - posL + 1;
if(maxLength < lengthCache)
{
maxLength = lengthCache;
longestString = s.substr(posL,maxLength);
}
posL = posM;
posR = posM + 1;
if(s[posL] != s[posR])
continue;
while(true)
{
if(posL - 1 >= 0 && posR + 1 <= s.size() - 1)
{
if(s[posL - 1] == s[posR + 1])
{
--posL;
++posR;
continue;
}
}
break;
}
lengthCache = posR - posL + 1;
if(maxLength < lengthCache)
{
maxLength = lengthCache;
longestString = s.substr(posL,maxLength);
}
}
return longestString;
}
};
|