6 最长公共子串

给定两个字符串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;
}
发布了23 篇原创文章 · 获赞 8 · 访问量 1368

猜你喜欢

转载自blog.csdn.net/qq_45550552/article/details/104601177