最长公共子串题解

题目描述
给定两个字符串 a、b,现有k次机会对字符串中的字符进行修改,使修改后两个字符串的最长公共子串最长。
每一次修改,可以选择a、b字符串中某一个串的任意位置修改成任意字符。

输入格式:
第一行包括一个正整数 k。
第二行和第三行分别输入字符串 a、b。(每个串的长度不超过500)

输出格式:
输出为一个整数,表示修改后的两个串的最长公共子串长度。

解题思路
暴力:采用二重循环,在 a、b 字符串中选定不同起始位置,计算最多修改 k 次后的两个串的最长公共子串长度,比较得出最终结果。

完整代码

#include<stdio.h>
#include<string.h>

int main()
{
    int k, n1, n2, ans = 0, count, i, j, p, q;
    char a[505], b[505];
    scanf("%d", &k);
    getchar();
    gets(a);
    gets(b);
    n1 = strlen(a);
    n2 = strlen(b);

    for (i = 0; i < n1; i++) {
        for (j = 0; j < n2; j++) {
            p = i;
            q = j;
            count = 0;
            while (count != k && p != n1 && q != n2) {
                if (a[p] != b[q]) {
                    count++;
                }
                p++;
                q++;
            }
            if (p - i > ans) {
                ans = p - i;
            }
        }
    }
    printf("%d", ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/dump16/p/12409981.html