字串 判斷兩個字串是否為變形詞

2021-08-21 07:20:08 字數 1251 閱讀 4679

【問題】

給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。

【舉例】

str1 = 「123」,str2 = 「231」,返回true 

str1 = 「123」,str2 = 「2331」,返回false

【基本思路】

如果兩個字串其中之一為空或長度不相同,直接返回false

假設出現的字元的編碼值在0~255之間,即是ascii編碼,那麼先申請乙個長度為256的整型陣列array,arr[a] = b,表示字元a出現的次數是b,依次遍歷字串str1,統計每種字元出現的數量,相當於統計每種字元的詞頻。

遍歷字串str2,每遍歷到乙個字元都在array陣列中把詞頻減1,如果減少之後的值小於0,直接返回false。如果遍歷完str2,array中的值也沒有成為負數(正常應都為0,當有負數即必有不相等出現),則返回true。

為什麼只考慮詞頻最後是否有負數?因為如果最後有的詞頻為正數,說明str1的長度一定大於str2,這種情況在步驟一的時候就已經剔除了。

如果字元的範圍不在0~255,則可以利用雜湊表來代替陣列。

【高階】

暴力破解雙陣列法,時間複雜度n2,空間複雜度2n

單陣列計數法,時間複雜度n,空間複雜度n

雙指標原陣列移動法,時間複雜度n,空間複雜度1

#判斷兩個字串是否為變形詞(相似詞)

#使用乙個陣列進行判斷

def isdeformation(str1,str2):

if str1 == none or str2 == none or len(str1) != len(str2):

return flase

array = [0 for i in range(256)] #256大小的陣列,每格賦值為0

for i in range(len(str1)):

array[ord(str1[i])] +=1 #每個字元的ascii編碼對應格值+1

for i in range(len(str2)):

array[ord(str2[i])] -=1

if array[ord(str2[i])] <0:

retuen flase

return ture

判斷兩個字串是否為變形詞

例如 str1 123 str2 132 true str1 123 str2 1332 false 思路 1.如果其中乙個字串為空或者兩個字串長度不相等,返回 false 2.遍歷 str1,記錄每個字元出現的次數 1.建立乙個新的陣列 arr 初始化都為 0 2.遍歷 str1,利用字元的 as...

判斷兩個字串是否為變形詞

判斷兩個字串是否為變形詞 給定兩個字串str1和str2,如果str1和str2 現的字元種類出現的一樣且每種字元出現的次數也一樣,那麼str1和str2互為變形詞。請判斷str1和str2是否為變形詞。輸入描述 輸入包括3行,第一行包含兩個整數n,m 1 n,m 105 1 leq n,m leq...

字串問題 判斷兩個字串是否為變形詞

問題 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false 基本思路...