给定两个字符串a、b,现有k次机会对字符串中的字符进行修改,使修改后两个字符串的最长公共子串最长。每一次修改,可以选择a、b字符串中某一个串的任意位置修改成任意字符。
输入格式:
第一行包括一个正整数 k。
第二行和第三行分别输入字符串a、b。(每个串的长度不超过500)
输出格式:
输出为一个整数,表示修改后的两个串的最长公共子串长度。
输入样例:
5
aaaaa
bbbbb
输出样例:
5
#include<bits/stdc++.h>
using namespace std;
int k;
int f(string a,string b){
int i=0,q=0,lena=a.length(),lenb=b.length();
while(i<lena&&i<lenb&&(q<k||a[i]==b[i])){
if(a[i]!=b[i]) q++;
i++;
}
return i;
}//两个串从开头能得到的最大串
int main(){
cin>>k;
string a,b;cin>>a>>b;
int lena=a.length(),lenb=b.length();
int sum=0;
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){
int ma=f(a.substr(i),b.substr(j));//从i,j开始到结尾的字符串拷贝(substr(开头,长度),长度默认为s.length()-开头)
if(ma>sum) sum=ma;
}
}
cout<<sum;
return 0;
}