最长公共子串问题

给定两个字符串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;
}

 



posted @ 2020-03-05 12:12  Haikon_C  阅读(327)  评论(0)    收藏  举报