2026/1/12 4:40:34
网站建设
项目流程
网站建设初学者必学,oa系统app下载,网页游戏排名,辽阳做网站公司题目#xff1a;
给定两个字符串 text1 和 text2#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 #xff0c;返回 0 。
一个字符串的 子序列 是指这样一个新的字符串#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符给定两个字符串 text1 和 text2返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 返回 0 。一个字符串的 子序列 是指这样一个新的字符串它是由原字符串在不改变字符的相对顺序的情况下删除某些字符也可以不删除任何字符后组成的新字符串。例如“ace” 是 “abcde” 的子序列但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1输入text1 “abcde”, text2 “ace”输出3解释最长公共子序列是 “ace” 它的长度为 3 。示例 2输入text1 “abc”, text2 “abc”输出3解释最长公共子序列是 “abc” 它的长度为 3 。示例 3输入text1 “abc”, text2 “def”输出0解释两个字符串没有公共子序列返回 0 。解析这道题解法就是动态规划问题主要是dp数组的设计dp[i][j] 表示字符串 text1 的前 i 个字符和 text2 的前 j 个字符的最长公共子序列长度。对dp数组初始化dp[0][j] 0第一个字符串为空时公共子序列长度为0。dp[i][0] 0第二个字符串为空时公共子序列长度为0。如果 text1[i-1] text2[j-1]说明当前字符可以匹配所以dp[i][j] dp[i-1][j-1] 1如果不相等只能看dp[i][j] max(dp[i-1][j], dp[i][j-1])要么丢弃 text1 的当前字符要么丢弃 text2 的当前字符看哪种更优具体代码/** * param {string} text1 * param {string} text2 * return {number} */varlongestCommonSubsequencefunction(text1,text2){constmtext1.lengthconstntext2.lengthconstdpArray.from({length:m1},()Array(n1).fill(0))//遍历两个字符串for(leti1;im;i){for(letj1;jn;j){// 如果字符相同最长公共子序列长度加1if(text1[i-1]text2[j-1]){dp[i][j]dp[i-1][j-1]1}else{// 如果不同取上方或左方的最大值dp[i][j]Math.max(dp[i-1][j],dp[i][j-1])}}}returndp[m][n]};