两种情况考虑,反向思维:
class Solution {
public:
string longestPalindrome(string s) {
if (s.size() <= 1)
return s;
int mid = 0;
int max_length = 1;
for (int i = 0; i<s.size() - 1; i++) {
int temp1 = funt(s, i, i);
int temp2 = funt(s, i, i + 1);
if (temp1>max_length || temp2>max_length) {
mid = i;
max_length = temp1>temp2 ? temp1 : temp2;
}
}
if (max_length % 2 != 0)
return s.substr(mid - max_length / 2, max_length);
else
return s.substr(mid - max_length / 2 + 1, max_length);
}
private:
int funt(string &s, int L, int R) {
int out = 0;
while (L >= -1 && R<=s.size()) {
if (L >= 0 && R < s.size()) {
if (s[L] == s[R]) {
L--; R++;
}
else {
out = R - L - 1;
break;
}
}
else {
out = R - L - 1;
break;
}
}
return out;
}
};