Python 字串轉換
假設我們有兩個字串 str1 和 str2。它們的長度相同,我們需要檢查是否可以透過零次或多次轉換將 str1 轉換為 str2。
在一次轉換中,我們可以將 str1 中所有出現的一個字元轉換為任何其他小寫英文字母。我們需要檢查是否可以將 str1 轉換為 str2。
因此,如果輸入類似於 str1 = "aabcc",str2 = "ccdee",則輸出為 true,因為可以將 'c' 轉換為 'e',然後將 'b' 轉換為 'd',然後將 'a' 轉換為 'c'。這裡需要注意的是轉換的順序很重要。
為了解決這個問題,我們將遵循以下步驟:
定義一個函式 compress()。它將接收字串 s
n := s 的大小
a := 新列表
count := 1
對於範圍 1 到 n 中的 i,執行:
如果 s[i] 與 s[i-1] 不相同,則
將 count 插入到 a 的末尾
count:= 1
否則,
count := count + 1
將 count 插入到 a 的末尾
返回 a
定義一個函式 canConvert()。它將接收 str1,str2
a := compress(str1)
b := compress(str2)
n := a 的大小,m := b 的大小
d:= 新對映
n := n 和 m 的最小值
i := 0
當 i<n 為非零時,執行:
如果 a[i] > b[i] 為非零,則
返回 False
i := i + 1
對於 str2 中的每個 i,執行:
如果 i 不在 d 中,則
d[i]:= 1
如果 26 - d 的大小為非零或 str1 與 str2 相同,則返回 True,否則返回 False
讓我們看看下面的實現,以便更好地理解:
示例
class Solution(object): def compress(self,s): n = len(s) a = [] count = 1 for i in range(1,n): if s[i]!=s[i-1]: a.append(count) count=1 else: count+=1 a.append(count) return a def canConvert(self, str1, str2): a = self.compress(str1) b = self.compress(str2) n = len(a) m = len(b) d={} n = min(n,m) i = 0 while i<n: if a[i]>b[i]: return False i+=1 for i in str2: if i not in d: d[i]=1 return True if 26-len(d) or str1 == str2 else False ob = Solution() print(ob.canConvert("aabcc", "ccdee"))
輸入
"aabcc", "ccdee"
輸出
True
廣告