//用动态规划 //若s1[i]==s2[j] dp[i][j]=dp[i-1][j-1]+1 //若s1[i]!=s2[j] 则dp[i][j]=max(dp[i-1][j],dp[i][j-1]) //dp[i][j] 表示在字符串s1长度为i,字符串s2长度为j的前提下 最长公共子序列长度 //string 和memset(数组名,初值,范围) 在#include<csting>中 #include<iostream> #include<cstring> #include<math.h> using namespace std; int dp[101][101]; string a; string b; int main(){ cin>>a; cin>>b; memset(dp,0,sizeof(dp)); int len1 = a.length(); int len2 = b.length(); for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ if(a[i-1]==b[j-1]){ dp[i][j]=dp[i-1][j-1]+1; }else{ dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } cout<<dp[len1][len2]; // cout<<a[1]; return 0; }