LeetCode 5. Longest Palindromic Substring
原题链接
简单
作者:
YC.
,
2021-03-07 16:08:36
,
所有人可见
,
阅读 343
// 中心扩散法
class Solution {
public:
string longestPalindrome(string s) {
// 1、边界
if (s.length() <= 1) {
return s;
}
string res = "";
// 2、以每一个当前字符为中心进行扩散
for (int i = 0; i < s.length() - 1; ++i) {
// 3、构造一个帮助函数用于求解出以当前字符为中心的回文子串
// 4、以当前字符为中心存在两种:最终字符串长度为奇数或偶数
string oddString = helper(s, i, i);
string evenString = helper(s, i, i + 1);
// 5、获取两者中的最大者
string tempMaxStr = oddString.length() > evenString.length() ? oddString : evenString;
// 6、与之前记录的最长的回文子串进行比较
res = res.length() > tempMaxStr.length() ? res : tempMaxStr;
}
return res;
}
string helper(const string& s, int left, int right) {
int length = s.length();
while (left >= 0 && right < length) {
if (s[left] == s[right]) {
left --;
right ++;
} else {
break;
}
}
return s.substr(left + 1, right - left - 1); // 注意,此处是left+1
}
};