2-6 最长公共子串 (100分)
给定两个字符串a、b,现有k次机会对字符串中的字符进行修改,使修改后两个字符串的最长公共子串最长。每一次修改,可以选择a、b字符串中某一个串的任意位置修改成任意字符。
输入格式:
第一行包括一个正整数 k。
第二行和第三行分别输入字符串a、b。(每个串的长度不超过500)
输出格式:
输出为一个整数,表示修改后的两个串的最长公共子串长度。
输入样例:
5
aaaaa
bbbbb
输出样例:
5
代码:
#include<stdio.h>
#include<string.h>
int x = 0;
int main(void)
{
int k,str1,str2;
char a[501], b[501];
scanf("%d %s %s", &k, a, b);
str1 = strlen(a);
str2 = strlen(b);
for(int i = 0;i<str1;i++)
for (int j = 0; j < str2; j++) {
char* p1 = a + i;
char* p2 = b + j;
int n = k;
int temp = 0;
while (*p1 != '\0' && *p2 != '\0') {
if (*p1 == *p2) {
temp++;
p1++;
p2++;
}
else {
if (n > 0) {
n--;
p1++;
p2++;
temp++;
x = x > temp ? x : temp;
}
else
break;
}
}
}
printf("%d", x);
return 0;
}