C语言怎么求最长对称子串
时间: 2023-08-28 08:09:27 浏览: 120
求最长对称子串可以使用中心扩展法。
具体的算法步骤如下:
1. 遍历字符串,以每个字符为中心,向左右扩展,寻找以该字符为中心的最长对称子串。
2. 遍历字符串,以每两个相邻字符的间隙为中心,向左右扩展,寻找以该间隙为中心的最长对称子串。
3. 比较上述两种情况的最长对称子串,返回最长的那个。
以下是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
void findLongestPalindromeSubstring(char *str) {
int length = strlen(str);
int maxLength = 1;
int start = 0;
for (int i = 0; i < length; i++) {
// 以每个字符为中心向左右扩展
int left = i - 1;
int right = i + 1;
int len = 1;
while (left >= 0 && right < length && str[left] == str[right]) {
len += 2;
left--;
right++;
}
if (len > maxLength) {
maxLength = len;
start = left + 1;
}
// 以相邻字符的间隙为中心向左右扩展
left = i;
right = i + 1;
len = 0;
while (left >= 0 && right < length && str[left] == str[right]) {
len += 2;
left--;
right++;
}
if (len > maxLength) {
maxLength = len;
start = left + 1;
}
}
printf("最长对称子串为:");
for (int i = start; i < start + maxLength; i++) {
printf("%c", str[i]);
}
}
int main() {
char str[] = "abacdfgdcaba";
findLongestPalindromeSubstring(str);
return 0;
}
```
输出结果为:
```
最长对称子串为:aba
```
阅读全文