根據給定條件檢查Python中兩個字串是否等價
假設我們有兩個大小相同的字串 s 和 t。我們必須檢查 s 和 t 是否等價。
- 它們都相等。或者,
- 如果我們將 s 分成兩個大小相同的連續子字串,子字串為 s1 和 s2,並將 t 同樣分成 t1 和 t2,則以下之一應有效:
- s1 遞迴地等價於 t1,s2 遞迴地等價於 t2
- s1 遞迴地等價於 t2,s2 遞迴地等價於 t1
因此,如果輸入類似於 s = "ppqp" t = "pqpp",則輸出將為 True,因為如果我們將 s 和 t 分成兩部分 s1 = "pp",s2 = "qp" 和 t1 = "pq",t2 = "pp",這裡 s1 = t2,如果我們將 s2 和 t1 分成兩部分 s21 = "q",s22 = "p",t11 = "p",t12 = "q",這裡也有 s21 = t12 和 s22 = t11,所以它們是遞迴等價的。
為了解決這個問題,我們將遵循以下步驟:
- 定義一個函式 util()。這將接收 s。
- 如果 s 的大小是奇數,則
- 返回 s
- left := util(s 的左半部分)
- right := util(s 的右半部分)
- 返回 (left 連線 right) 和 (right 連線 left) 的最小值
- 在主方法中,當 util(s) 與 util(t) 相同時返回 true,否則返回 false
讓我們看看下面的實現,以便更好地理解:
示例程式碼
def util(s): if len(s) & 1 != 0: return s left = util(s[0:int(len(s) / 2)]) right = util(s[int(len(s) / 2):len(s)]) return min(left + right, right + left) def solve(s,t): return util(s) == util(t) s = "ppqp" t = "pqpp" print(solve(s, t))
輸入
"ppqp", "pqpp"
輸出
True
廣告