最长公子串

Markdown在线编辑器 - www.MdEditor.com

5 最长公共子串 (100分)

给定两个字符串a、b,现有k次机会对字符串中的字符进行修改,使修改后两个字符串的最长公共子串最长。每一次修改,可以选择a、b字符串中某一个串的任意位置修改成任意字符。

输入格式:

第一行包括一个正整数 k。
第二行和第三行分别输入字符串a、b。(每个串的长度不超过500)

输出格式:

输出为一个整数,表示修改后的两个串的最长公共子串长度。

输入样例:

5
aaaaa
bbbbb

输出样例:

5

Accepted

#include <stdio.h>
#include <string.h> 
int main()
{   
    int k,i,j,len1,len2,t1,t2,sum,time,max=-1;
	char s1[505],s2[505]; 
    scanf("%d",&k);
    scanf("%s",&s1);
    scanf("%s",&s2);
    len1=strlen(s1);
    len2=strlen(s2);
for(i=0;i<len1;i++)
        for(j=0;j<len2;j++)
        {   
			t1=i;
            t2=j;
            sum=0;
            time=k;
            while(t1<len1&&t2<len2)
            {   
            while(t1<len1&&t2<len2&&s1[t1]==s2[t2])
              {
                t1++;
                t2++;
                sum++;
              }
              if(time>0)
              {  
	     t1++;
         t2++;
            sum++;
                time--;
              }
              else
              break;
             }
	 if(sum>max)
	 max=sum;   
        }  
    printf("%d",max);
    return 0; 
}

a[0],b[0]为头,遍寻找出这俩为头起初的最大公子串,然后a[0],b[1]...然后a[1],b[0]..以此类推,全部的sum的最大值即为最大公子串。

原文地址:https://www.cnblogs.com/czl411/p/12607506.html