最长子序列

思路

最开始用的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;
}
posted @ 2022-11-14 15:55  壹剑霜寒十四州  阅读(14)  评论(0编辑  收藏  举报