HDU 1159——Common Subsequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159
题目大意:给定两个字符串,求出两个字符串最大公共字符串。
一开始的话是没有什么思路的,后来除了借鉴书上p275《算法竞赛—入门经典》和某位博主的详细讲解,才算是明白了
借鉴链接:http://blog.csdn.net/a_eagle/article/details/7213236
代码:
1 #include<iostream> //p275 2 #include<cstring> 3 4 5 using namespace std; 6 7 int f[1001][1001];//定义成全局防溢出 8 9 int main() 10 { 11 char a[1001],b[1001]; 12 int i,j,len1,len2; 13 while(~scanf("%s %s",a,b)) 14 { 15 len1=strlen(a); 16 len2=strlen(b); 17 for(i=0;i<=len1;i++) 18 { 19 f[i][0]=0; 20 } 21 for(i=0;i<=len2;i++) 22 { 23 f[0][i]=0; 24 } 25 26 for(i=1;i<=len1;i++) 27 { 28 for(j=1;j<=len2;j++) 29 { 30 if(a[i-1]==b[j-1]) 31 { 32 f[i][j]=f[i-1][j-1]+1; 33 } 34 else 35 { 36 f[i][j]=f[i-1][j]>f[i][j-1]?f[i-1][j]:f[i][j-1]; 37 } 38 } 39 } 40 printf("%d\n",f[len1][len2]); 41 } 42 return 0; 43 }