题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1306
思路:一开始还以为是求最长公共序列呢。。。仔细一看,orz.....就是求两个串匹配时公共部分字符最多相同的个数。。。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 8 int gcd(int a,int b){ 9 return a%b==0?b:gcd(b,a%b); 10 } 11 12 13 int main(){ 14 char str1[1100],str2[1100]; 15 while(scanf("%s",str1),strcmp(str1,"-1")){ 16 scanf("%s",str2); 17 int len1=strlen(str1); 18 int len2=strlen(str2); 19 int MAX=0,len=0; 20 for(int i=0;i<len1;i++){ 21 for(int j=0;j<len2;j++){ 22 len=0; 23 for(int k1=i,k2=j;k1<len1&&k2<len2;k1++,k2++){ 24 if(str1[k1]==str2[k2])len++; 25 } 26 if(len>MAX)MAX=len; 27 } 28 } 29 if(MAX==0)printf("appx(%s,%s) = 0\n",str1,str2); 30 else { 31 int len=len1+len2; 32 MAX*=2; 33 int x=gcd(MAX,len); 34 if(MAX==len){ 35 printf("appx(%s,%s) = 1\n",str1,str2); 36 }else 37 printf("appx(%s,%s) = %d/%d\n",str1,str2,MAX/x,len/x); 38 } 39 } 40 return 0; 41 }