Python程式:將兩個字串分割成每個分割槽都形成異位詞
假設我們有兩個非空字串 s 和 t,它們長度相同。我們需要將它們分割成子字串,使得 s 和 t 的每個子字串對具有相同的大小,並且它們互為異位詞。現在找到切割索引,使其導致 s 和 t 的最大切割數。如果找不到結果,則返回空列表。
因此,如果輸入類似於 s = "bowcattiger" t = "owbactietgr",則輸出將為 [0, 3, 5, 6, 10],因為我們可以將字串分割成 5 個分割槽,使得每個字串互為異位詞。s = ["bow", "ca", "t", "tige", "r"],t = ["owb", "ac", "t", "ietg", "r"]
為了解決這個問題,我們將遵循以下步驟:
- intervals := 一個新的列表
- cs := 一個對映,包含 s 中存在的字元及其頻率
- ct := 一個對映,包含 t 中存在的字元及其頻率
- 如果 cs 與 ct 不相同,則
- 返回一個新的列表
- 對於 x 從 s 的大小 - 1 到 0,執行以下操作:
- cs[s[x]] := cs[s[x]] - 1
- ct[t[x]] := ct[t[x]] - 1
- 如果 cs 與 ct 相同,則
- 將 x 插入到 intervals 的末尾
- 對列表 intervals 進行排序並返回
讓我們看下面的實現以獲得更好的理解:
示例
from collections import Counter class Solution: def solve(self, a, b): intervals = [] ca = Counter(a) cb = Counter(b) if ca != cb: return [] for x in reversed(range(len(a))): ca[a[x]] -= 1 cb[b[x]] -= 1 if ca == cb: intervals.append(x) return sorted(intervals) ob = Solution() s = "bowcattiger" t = "owbactietgr" print(ob.solve(s, t))
輸入
"bowcattiger", "owbactietgr"
輸出
[0, 3, 5, 6, 10]
廣告