给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
思路:
从字符串的开头开始,向两边扩散开,来寻找最大的回文子串
困难点:
分奇偶(对应的值分清就OK)
代码:
char* longestPalindrome(char* s) {
int p = 0, q = 0, max = 1, len = strlen(s);
for (int i = 1; i < len; i++) {
int k = 1;
while (i - k >= 0 && i + k < len && s[i - k] == s[i + k])k++;
if (max < (k - 1) * 2 + 1) {
max = (k - 1) * 2 + 1;
p = i - k + 1;
q = i + k - 1;
}
}
for (int i = 0; i < len; i++) {
if (s[i] == s[i + 1]) {
int k = 0;
while (i - k >= 0 && i + 1 + k < len && s[i - k] == s[i + 1 + k])k++;
if (max < k * 2) {
max = k * 2;
p = i - k + 1;
q = i + k;
}
}
}
char* ret = (char*)calloc(max + 1, sizeof(char));
for (int i = 0; i < max; i++)
ret[i] = s[p + i];
return ret;
}