1 题目要求:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd"
Output: "bb"
2 解决方法:
遍历对称中心元素,根据奇数对称和偶数对称两种情况分别计算对称子串长度,将更长字串的起始位置和长度进行更新。
class Solution {
public:
string longestPalindrome(string s) {
if (s.empty()) return "";
int start = 0, max = 1, reg = 0;
for (int i = 0; i != s.length()-1; i++) {
if(s[i]==s[i+1]){
for (int j = 0; ((i - j) >= 0) && ((i + 1 + j) < s.length()); j++) {
if (s[i - j] != s[i + 1 + j]) break;
reg = (j + 1) * 2;
if (reg > max) {
max = reg;
start = i - j;
}
}
}
if((i>0)&&(s[i-1]==s[i+1])){
for (int j = 0; ((i - j) >= 0) && ((i + j) < s.length()); j++) {
if (s[i - j] != s[i + j]) break;
reg = 1 + 2 * j;
if (reg > max) {
max = reg;
start = i - j;
}
}
}
}
return s.substr(start,max);
}
};
需要注意每一次都要同时考虑两种情况,不然ccc这种可能会漏掉。
时间复杂度O(n2)
空间复杂度O(1)
Manacher法(待补充)