C语言实现最长对称子字符串算法
以下是用C语言实现的最长对称子字符串的算法:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int main() {
char str[MAX_LEN];
int len, i, j, k, max_len = 0, start = 0;
printf("请输入字符串:");
scanf("%s", str);
len = strlen(str);
for (i = 0; i < len; i++) {
// 以i为中心向两边扩展
j = i;
k = i;
while (j >= 0 && k < len && str[j] == str[k]) {
j--;
k++;
}
if (k - j - 1 > max_len) {
max_len = k - j - 1;
start = j + 1;
}
// 以i和i+1为中心向两边扩展
j = i;
k = i + 1;
while (j >= 0 && k < len && str[j] == str[k]) {
j--;
k++;
}
if (k - j - 1 > max_len) {
max_len = k - j - 1;
start = j + 1;
}
}
printf("最长对称子字符串为:");
for (i = start; i < start + max_len; i++) {
printf("%c", str[i]);
}
return 0;
}
算法思路:
- 枚举每个字符,以该字符为中心向两边扩展,找到以该字符为中心的最长对称子字符串;
- 枚举每两个相邻字符,以这两个字符为中心向两边扩展,找到以这两个字符为中心的最长对称子字符串;
- 在所有的最长对称子字符串中找到长度最长的子字符串即为所求。
算法复杂度为 $O(n^2)$,其中 $n$ 为字符串的长度。
原文地址: http://www.cveoy.top/t/topic/kUrg 著作权归作者所有。请勿转载和采集!