以下是用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;
}

算法思路:

  1. 枚举每个字符,以该字符为中心向两边扩展,找到以该字符为中心的最长对称子字符串;
  2. 枚举每两个相邻字符,以这两个字符为中心向两边扩展,找到以这两个字符为中心的最长对称子字符串;
  3. 在所有的最长对称子字符串中找到长度最长的子字符串即为所求。

算法复杂度为 $O(n^2)$,其中 $n$ 为字符串的长度。

C语言实现最长对称子字符串算法

原文地址: http://www.cveoy.top/t/topic/kUrg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录