最长公子串
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的最大值即为最大公子串。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号