使用 Python 檢查字串是否可以在 K 步內轉換的程式
假設我們有兩個字串 s 和 t,我們需要檢查 s 是否可以在 k 步或更少的步數內轉換為 t。在第 i 步,您可以執行以下操作。
在 s 中選擇任何索引 j(從 1 開始),使得 1 <= j <= s 的大小,並且 j 在任何先前的移動中都沒有被選擇,並將該索引處的字元移動 i 次。
保持不變。
這裡移動字元意味著用字母表中的下一個字母替換它(如果字母是 'z',則將其環繞到 'a')。因此,將字元移動 i 次表示應用 i 次移動操作。
因此,如果輸入類似於 s = "poput" t = "vwput" k = 9,則輸出將為 True,因為在 i = 6 時,我們可以將 'p' 轉換為 'v',在 i = 8 時,我們可以將 'o' 轉換為 'w'。
為了解決這個問題,我們將遵循以下步驟
如果 s 的大小與 t 的大小不同,則
返回 False
count := 一個數組,包含所有從 0 到 25 的 i 的 (1 和 (k - i + 1 +(k - i)/26) 的最小值)
對於 s 中的每個字元 c1 和 t 中的每個字元 c2,執行
如果 c1 與 c2 不相同,則
diff :=(c2 的 ASCII 碼 - c1 的 ASCII 碼 + 26) 模 26
如果 count[diff] <= 0,則
返回 False
count[diff] := count[diff] - 1
返回 True
讓我們看看以下實現,以便更好地理解
示例
def solve(s, t, k): if len(s) != len(t): return False count = [min(1, k - i + 1) + (k - i)//26 for i in range(26)] for c1, c2 in zip(s, t): if (c1 != c2): diff = (ord(c2) - ord(c1) + 26) % 26 if count[diff] <= 0: return False count[diff] -= 1 return True s = "poput" t = "vwput" k = 9 print(solve(s, t,k))
輸入
"poput","vwput",9
輸出
True
廣告