LeetCode 1092 最短公共超序列

2021-10-25 06:55:44 字數 971 閱讀 3294

給出兩個字串 str1 和 str2,返回同時以 str1 和 str2 作為子串行的最短字串。如果答案不止乙個,則可以返回滿足條件的任意乙個答案。

(如果從字串 t 中刪除一些字元(也可能不刪除,並且選出的這些字元可以位於 t 中的 任意位置),可以得到字串 s,那麼 s 就是 t 的子串行)

from typing import *

from collections import defaultdict

class solution:

def shortestcommonsupersequence(self, str1: str, str2: str) -> str:

dp = defaultdict(lambda: '')

m, n = len(str1), len(str2)

for i in range(1, m + 1):

for j in range(1, n + 1):

if str1[i - 1] == str2[j - 1]:

dp[i, j] = dp[i - 1, j - 1] + str1[i - 1]

else:

if len(dp[i - 1, j]) > len(dp[i, j - 1]):

dp[i, j] = dp[i - 1, j]

else:

dp[i, j] = dp[i, j - 1]

s = dp[m, n]

i, j = 0, 0

ans =

for c in s:

while i < m and str1[i] != c:

i += 1

while j < n and str2[j] != c:

j += 1

i += 1

j += 1

return ''.join(ans) + str1[i:] + str2[j:]

HHUOJ 1092 題面最短的題

題目鏈結 求該公式的值 i 1n j 1m i2j 4i2 ij 4 i 12 sum sum m i 2j 4i 2 ij 4i 12 i 1 n j 1 m i 2j 4 i2 i j 4i 12 由於答案可能過大,所以請輸出答案對 109 7 取模後的結果。輸入包含多組資料,請讀入到檔案末尾結...

Leetcode 最短回文串

題目鏈結 只是在馬發車演算法基礎上改動了最後的處理方式,因為這道題限制在字串前面新增字元,所以必須回文子串的起始位置在s字串的開頭才能。class solution string t for int i 0 ii else while t i p i 1 t i p i 1 if i p i r c...

leetcode 之最短回文串

給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。題解 有馬拉車和kmp的解法 博主因為太久沒寫馬拉車演算法忘記了馬拉車演算法 所以直接使用kmp演算法來解決 本質就是求文字串正序和逆序的最長公共子串長度,其實就是kmp的next陣列的求法 所...