最长子序列
思路
最开始用的dp做,但是发现只有10分
#include<iostream>
using namespace std;
string a,b;
int main(){
cin>>a>>b;
int dp[a.length()+1][b.length()+1]={0};
for(int i = 1;i<=a.length();i++){
char x1 = a.at(i-1);
for(int j = 1;j<=b.length();j++){
char x2 = b.at(j-1);
if(x1==x2){
dp[i][j] = dp[i-1][j-1]+1;
}else{
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
}
cout<<dp[a.length()][b.length()];
return 0;
}
人家的代码
# include<iostream>
using namespace std;
int main(){
string a,b;
cin>>a>>b;
int ans = 0;
for(int i = 0,j = 0;i<a.length(),j<b.length();i++){
if(a[i]==b[j]){//思考了下,题目告诉是b为子序列,好像只有这种才能,不然如果a是子,短就报错
j++;
ans++;
}
}
cout<<ans;
return 0;
}
用心做~