5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
题目来源:https://leetcode.cn/problems/longest-palindromic-substring/
/*
array[i][j]表示 s[i]--s[j]是否为回文串
而 array的判断为
1.如果s[i] == s[j],
1.1 如果 i+1 > j-1 或 array[i+1][j-1] == true 则 array[i][j] = true
1.2 其他情况一律 array[i][j] = false
2. 如果 s[i] != s[j],array[i][j] = false
例如: s = "babad"
j 0 1 2 3 4
i
0
1
2
3
4
j = 0
第一步 array[0][0] = true
j = 1
第二步 array[0][1] = false array[1][1] = true
j = 2
第三步 array[0][2] = true array[1][2] = false array[2][2] = true
由于array[i][j]只会参考array[i+1][j-1]的数据,array[i][j]覆盖array[i][j-1],因此我们可以用一维数组表示array[i]即可
*/
#define MAX(a, b) ((a) > (b) ? (a) : (b))
char * longestPalindrome(char * s){
int len = strlen(s);
bool array[len];
int result = 0;
int start = 0, end = 0;
for (int j = 0; j < len; j++) {
for (int i = 0; i <= j; i++) {
if (s[i] == s[j]) {
if (i + 1 > j - 1 || array[i+1] == true) {
array[i] = true;
if ((j - i + 1) > result) {
result = j - i + 1;
start = i;
end = j;
}
} else {
array[i] = false;
}
} else {
array[i] = false;
}
}
}
s[start + result] = '\0';
return s + start ;
}