http://acm.hdu.edu.cn/showproblem.php?pid=1159
dp[i][j]代表长度为i的串s1与长度为j的串s2的最长公共子串
View Code
#include <iostream> using namespace std ; int dp[1001][1001] ; int main() { char s1[1001],s2[1001] ; while(~scanf("%s%s",s1,s2)) { int len1=strlen(s1) ; int len2=strlen(s2) ; memset(dp,0,sizeof(dp)) ; for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) { if(s1[i-1]==s2[j-1]) dp[i][j]=dp[i-1][j-1]+1 ; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]) ; } printf("%d\n",dp[len1][len2]) ; } return 0 ; }