Python 程式:檢查刪除最多 k 個字元後是否可以形成迴文
假設我們有一個字串 s,我們需要檢查是否可以透過刪除最多 k 個字元將其變成迴文。
因此,如果輸入類似於 s = "lieuvrel",k = 4,則輸出將為 True,我們可以刪除三個字元以獲得迴文 "level"。
為了解決這個問題,我們將遵循以下步驟:
- 定義一個函式 lcs()。它將接收 a 和 b 作為引數。
- m := a 的大小,n := b 的大小
- table := (m + 1) x (n + 1) 大小的矩陣,並用 0 填充。
- 對於 i 範圍從 1 到 m,執行以下操作:
- 對於 j 範圍從 1 到 n,執行以下操作:
- 如果 a[i - 1] 與 b[j - 1] 相同,則
- table[i, j] := 1 + table[i - 1, j - 1]
- 否則,
- table[i, j] := table[i, j - 1] 和 table[i - 1, j] 中的最大值
- 如果 a[i - 1] 與 b[j - 1] 相同,則
- 對於 j 範圍從 1 到 n,執行以下操作:
- 返回 table[m, n]
- 從主方法執行以下操作:
- 當 (s 的大小 - lcs(s, s 的反轉) <= k) 時返回 true,否則返回 false
讓我們看看下面的實現,以便更好地理解:
示例
class Solution: def solve(self, s, k): def lcs(a, b): m, n = len(a), len(b) table = [[0] * (n + 1) for _ in range(m + 1)] for i in range(1, m + 1): for j in range(1, n + 1): if a[i - 1] == b[j - 1]: table[i][j] = 1 + table[i - 1][j - 1] else: table[i][j] = max(table[i][j - 1], table[i - 1][j]) return table[m][n] return len(s) - lcs(s, s[::-1]) <= k ob = Solution() s = "lieuvrel" k = 4 print(ob.solve(s, k))
輸入
"lieuvrel", 4
輸出
True
廣告