5. 最长回文子串
①题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
②示例
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
输入: “cbbd”
输出: “bb”
③解法
方法一:暴力法
遍历字符串每一项,看以此项为中心的最长回文是什么,选出最长字符串。
class Solution {
public:
string longestPalindrome(string s) {
int max_len = -1;
string result = "";
int s_length = s.length();
for(int i = 0; i < s_length; i++) {
if(i + 1 < s.length() && s[i] == s[i + 1]) {
int tmp_len = 2;
int tmp_step = min(i, s_length - i - 2);
for(int j = 0; j < tmp_step; j++) {
if(s[i - j - 1] == s[i + j + 2])
tmp_len += 2;
else
break;
}
if(max_len < tmp_len) {
max_len = tmp_len;
result = s.substr(i - max_len / 2 + 1, max_len);
}
}
int tmp_len = 1;