您现在的位置是:主页 > news > 营销型网站策划建设分为哪几个层次/搜索引擎优化培训免费咨询

营销型网站策划建设分为哪几个层次/搜索引擎优化培训免费咨询

admin2025/6/29 12:48:29news

简介营销型网站策划建设分为哪几个层次,搜索引擎优化培训免费咨询,哪家网站建设公司专业,淘宝客的免费电影网站怎么做目录题目思路动态规划题目来源 392. 判断子序列 题目思路 这道算是编辑距离的入门题目,因为从题意中我们也可以发现,只需要计算删除的情况,不用考虑增加和替换的情况。 动态规划 1.确定dp数组(dp table)以及下标的…

营销型网站策划建设分为哪几个层次,搜索引擎优化培训免费咨询,哪家网站建设公司专业,淘宝客的免费电影网站怎么做目录题目思路动态规划题目来源 392. 判断子序列 题目思路 这道算是编辑距离的入门题目,因为从题意中我们也可以发现,只需要计算删除的情况,不用考虑增加和替换的情况。 动态规划 1.确定dp数组(dp table)以及下标的…

目录

    • 题目思路
    • 动态规划

题目来源
392. 判断子序列

题目思路

这道算是编辑距离的入门题目,因为从题意中我们也可以发现,只需要计算删除的情况,不用考虑增加和替换的情况。

动态规划

  • 1.确定dp数组(dp table)以及下标的含义

dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。
注意这里是判断s是否为t的子序列。即t的长度是大于等于s的。

  • 2.确定递推公式

在确定递推公式的时候,首先要考虑如下两种操作
if (s[i - 1] == t[j - 1])
t中找到了一个字符在s中也出现了
if (s[i - 1] != t[j - 1])
相当于t要删除元素,继续匹配
if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;,因为找到了一个相同的字符,相同子序列长度自然要在dp[i-1][j-1]的基础上加1
if (s[i - 1] != t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];
和1143.最长公共子序列递推公式基本差不多

  • 3.dp数组如何初始化

从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1]
在定义dp[i][j]含义的时候为什么要表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。
定义在dp二维矩阵中可以留出初始化的区间
在这里插入图片描述

  • 4.确定遍历顺序

同理从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],那么遍历顺序也应该是从上到下,从左到右
在这里插入图片描述

  • 5.举例推导dp数组
    以示例一为例,输入:s = “abc”, t = “ahbgdc”,dp状态转移图如下:
    在这里插入图片描述

代码实现

class Solution {public boolean isSubsequence(String s, String t) {if(s == null ){return true;}int[][] dp = new int[s.length()+1][t.length()+1];for(int i = 1;i<=s.length();i++){for(int j = 1;j<=t.length();j++){if(s.charAt(i-1) == t.charAt(j-1)){dp[i][j] = dp[i-1][j-1] + 1;}else{dp[i][j] = dp[i][j-1];}}}return dp[s.length()][t.length()] == s.length()?true:false;}
}

在这里插入图片描述