30,419
社区成员
发帖
与我相关
我的任务
分享给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
C:
方法一:中心扩展
//计算回文串长度
int expandAroundCenter(char *s, int left, int right) {
int L = left, R = right;
while (L >= 0 && R < strlen(s) && s[L] == s[R]) {
L--;
R++;
}
return R - L - 1;
}
//字符串截取
char *cutwords(char *page,int start,int end){
char *word = malloc(sizeof(char)*2001);
int pos = 0;
for(int i = start; i < end; i++){
word[pos++]=page[i];
}
word[pos] = '\0';
return word;
}
char * longestPalindrome(char * s){
//判断是否提前结束
if (strlen(s) < 1) {
return "";
}
//
int start = 0, end = 0;
for (int i = 0; i < strlen(s); i++) {
int len1 = expandAroundCenter(s, i, i); //一个元素为中心
int len2 = expandAroundCenter(s, i, i + 1); //两个元素为中心
int len = fmax(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return cutwords(s, start, end + 1);
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring