题解 | 最长公共子序列

最长公共子序列

https://www.nowcoder.com/questionTerminal/4727c06b9ee9446cab2e859b4bb86bb8

最长公共子序列
动态规划:

//链接:https://www.nowcoder.com/questionTerminal/4727c06b9ee9446cab2e859b4bb86bb8

#include <bits/stdc++.h>
using namespace std;

int getmaxlenght(const string &str1,const string &str2,vector<vector<int>> &dp){
    for(int i = 1; i <= str1.size(); i++){
        for(int j = 1; j <= str2.size(); j++){
            if(str1[i-1] == str2[j-1])
                dp[i][j] = dp[i-1][j-1]+1;
            else dp[i][j]= max(dp[i-1][j], dp[i][j-1]);
        }
    }
    return dp[str1.size()][str2.size()];
}
int main(){
    string str1,str2;
    getline(cin,str1);
    getline(cin,str2);
    vector<vector<int>> dp(str1.size()+ 1,vector<int>(str2.size()+ 1,0));
    int lenght = getmaxlenght(str1, str2, dp);

    if (lenght == 0) cout << -1;
    string ans;
    ans.resize(lenght);
    int index = lenght-1;
    int x = str1.size(), y = str2.size();
    while(index >= 0){
        if(y >= 1 && dp[x][y] == dp[x][y-1])
            y--;
        else if(x >= 1 && dp[x][y] == dp[x-1][y])
            x--;
        else{
            ans[index--] = str1[x-1];
            x--;
            y--;
        }
    }
    cout << ans;
    return 0;
}
全部评论

相关推荐

牛客963010790号:一般是hr拿着老板账号在招人不是真是老板招
点赞 评论 收藏
分享
03-11 10:06
已编辑
河南师范大学 C++
点赞 评论 收藏
分享
👏offer1:杭州银行,软开,总包25w,说是无加班费且不调休💯offer2:去哪儿,前端开发。base北京,n&nbsp;*&nbsp;16,一周两天居家办公(不知真假),1075,前5年旅游补贴,打卡满时间可申请餐补🌱offer3:微店,前端开发。base杭州,n&nbsp;*&nbsp;14,双休,9:30&nbsp;~&nbsp;18:00,偶尔加班
吃猫的鱼_:第一段去银行的话,估计后面就躺平了,很难再跳槽大厂私企了,不利于涨薪以及个人技术发展的。 如果想跳槽涨薪,建议去私企卷一两年然后跳槽大厂干几年然后再去找个舒服点的养老
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务