ddsfsd


私信TA

用户名:cxrttt

访问量:491

签 名:

管理员我操你妈,傻逼,乱封我,老子不用了

等  级
排  名 10464
经  验 1033
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

管理员我操你妈,傻逼,乱封我,老子不用了

解题思路:
 捕获3.JPG


1642592479241376.png

注意事项:
第一张原图里字符串前的""是特意留出的,可以理解为空,可以直接忽略不看,红笔是i,j的值从1开始,黑笔是数组下标。

第二张图是递归公式,C[i,j]代表LCS长度,例如C[1,2]中X1=Y2=a,所以C[1][2]=C[0][1]+1=1

C[1][3]=max(C[0][3],C[1][2])=1

参考代码:

#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include <vector>
using namespace std;
int Max(string s1,string s2);
int main() {
    string s1,s2;
    cin >> s1 >> s2;
    Max(s1, s2);
    return 0;
}
int Max(string s1,string s2)
{
    int len1 = s1.size(),len2=s2.size(),maxlen;
    if (len1 > len2)
        maxlen = len1;
    else
        maxlen = len2;
    int dp[100][100]={0}; //矩阵初始全为0
    for (int i = 1; i <= len2 ; i++) //i代表len2即竖着的列(ace)
    {
        for (int j = 1; j <= len1 ; j++) //j代表len1即横着的行(babcde)

        {
        
            if ( s2[i-1]==s1[j-1] )//这里虽然i和j都是从1开始的,但是储存在数组里的字符串还是从下标0开始的!!!

                                            //由第一张图可得i=1对应a,j=1对应b。所以判断条件是s2[i-1]==s1[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[i][j]<<" ";
        }
        //cout << endl;
    }
    cout << maxlen - dp[len2][len1];
    return 0;
}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区