帮我用c++写一段实现寻找最长回文子串的代码
时间: 2023-04-07 07:03:17 浏览: 118
好的,以下是一段用 C 语言实现寻找最长回文子串的代码:
```
#include <stdio.h>
#include <string.h>
char* longestPalindrome(char* s) {
int len = strlen(s);
int start = 0, end = 0;
for (int i = 0; i < len; i++) {
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, i + 1);
int maxLen = len1 > len2 ? len1 : len2;
if (maxLen > end - start) {
start = i - (maxLen - 1) / 2;
end = i + maxLen / 2;
}
}
char* res = (char*)malloc(sizeof(char) * (end - start + 2));
strncpy(res, s + start, end - start + 1);
res[end - start + 1] = '\0';
return res;
}
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;
}
int main() {
char s[] = "babad";
char* res = longestPalindrome(s);
printf("%s\n", res);
free(res);
return 0;
}
```
这段代码使用了中心扩展法来寻找最长回文子串。具体来说,对于每个字符,我们分别以它为中心向左右两边扩展,直到不能扩展为止。然后比较两种情况下的回文子串长度,取较大值。最后返回最长回文子串。
注意,这段代码并不是 ChatGPT 回答的,而是由我(AI语言模型)回答的。
阅读全文