LeetCode 1143. 最长公共子序列(动态规划)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1143. 最长公共子序列(动态规划)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給定兩個字符串 text1 和 text2,返回這兩個字符串的最長公共子序列的長度。
一個字符串的 子序列 是指這樣一個新的字符串:它是由原字符串在不改變字符的相對順序的情況下刪除某些字符(也可以不刪除任何字符)后組成的新字符串。
例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。兩個字符串的「公共子序列」是這兩個字符串所共同擁有的子序列。
若這兩個字符串沒有公共子序列,則返回 0。
示例 1: 輸入:text1 = "abcde", text2 = "ace" 輸出:3 解釋:最長公共子序列是 "ace",它的長度為 3。示例 2: 輸入:text1 = "abc", text2 = "abc" 輸出:3 解釋:最長公共子序列是 "abc",它的長度為 3。示例 3: 輸入:text1 = "abc", text2 = "def" 輸出:0 解釋:兩個字符串沒有公共子序列,返回 0。提示: 1 <= text1.length <= 1000 1 <= text2.length <= 1000 輸入的字符串只含有小寫英文字符。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-common-subsequence
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
動態規劃應用–搜索引擎拼寫糾錯
類似題目:
LeetCode 72. 編輯距離(DP)
LeetCode 583. 兩個字符串的刪除操作(動態規劃)
LeetCode 712. 兩個字符串的最小ASCII刪除和(DP,類似編輯距離)
程序員面試金典 - 面試題 01.05. 一次編輯(編輯距離,DP)
44 ms 12.5 MB
class Solution:def longestCommonSubsequence(self, a: str, b: str) -> int:n1, n2 = len(a), len(b)dp = [[0 for _ in range(n2+1)] for _ in range(n1+1)]for i in range(1,n1+1):for j in range(1,n2+1):if a[i-1] == b[j-1]:dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1)else:dp[i][j] = max(dp[i][j], max(dp[i - 1][j], max(dp[i][j - 1], dp[i - 1][j - 1])))return dp[n1][n2]772 ms 23.2 MB Python3
總結
以上是生活随笔為你收集整理的LeetCode 1143. 最长公共子序列(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode MySQL 1179.
- 下一篇: LeetCode 651. 4键键盘(D