最长公共子串问题
给定两个字符串a、b,现有k次机会对字符串中的字符进行修改,使修改后两个字符串的最长公共子串最长。每一次修改,可以选择a、b字符串中某一个串的任意位置修改成任意字符。
输入格式:
第一行包括一个正整数 k。
第二行和第三行分别输入字符串a、b。(每个串的长度不超过500)
输出格式:
输出为一个整数,表示修改后的两个串的最长公共子串长度。
输入样例:
5
aaaaa
bbbbb
输出样例:
5
对于这个问题解决方案是,分别从两串开头双循环开始遍历,需要修改的时候使用修改次数加一,直到修改次数不足或者到某一条结尾,进入下一循环继续遍历
#include<bits/stdc++.h> using namespace std; char a[510],b[510]; int main() { int i,j,k,al,bl,used,as,bs,zc=0; cin>>k; getchar(); cin.getline(a, 510); cin.getline(b, 510); al = strlen(a); bl = strlen(b); for(i=0;i<al;i++){ for(j=0;j<bl;j++){ as=i;bs=j;used=0; while(used!=k&&as!=al&&bs!=bl){ if(a[as]!=b[bs]){ used+=1; } as++;bs++; } if(as-i>zc) zc=as-i; }} cout<<zc; return 0; }

浙公网安备 33010602011771号