問題: 給定兩個字串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中的值也沒有成為負數,則返回true。
為什麼只考慮詞頻最後是否有負數?因為如果最後有的詞頻為正數,說明str1的長度一定大於str2,這種情況在步驟一的時候就已經剔除了。
如果字元的範圍不在0~255,則可以利用雜湊表來代替陣列。
def isdeformation(str1,str2):
"""列表實現方式
"""if str1 == none or str2 == none or len(str1) != len(str2):
return false
chas = [0 for i in range(256)]
for item in str1:
chas[ord(str1)] +=1
for item in str2:
chas[ord(str1)] -=1
if chas[ord(str1)] < 0:
return false
return true
def isdeformation(str1,str2):
"""字典實現方式
"""if str1 == none or str2 == none or len(str1) != len(str2):
return false
chas = dict()
for item in str1:
if item not in chas:
chas[item] = 1
else:
chas[item] = chas[item] + 1
for item in str2:
if item not in chas:
return false
else:
chas[item] = chas[item] - 1
if chas[item] < 0:
return false
return true
判斷兩個字串是否互為變形詞
題目 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣且每種字元出現的次數也一樣,則str1和str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false。難度 inc...
判斷兩個字串是否互為變形詞
給定兩個字串s1,s2,如果s1,s2 現的字元種類一樣且每種字元出現的次數一樣,則s1,s2互為變形詞。判斷s1,s2是否為變形詞。如遍歷s1,統計每個字元個數,遍歷s2,每個字元,s1字元個數統計對應字元 1,若減到負數,說明個數不匹配,返回false。遍歷完成則返回true from coll...
判斷兩個字串是否互為變形詞
題目 給定兩個字串str1和str2,如果str1和str2 現的字元種類一樣且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。是變形詞返回true,不是變形詞返回false。舉例 str1 123 str2 231 返回true。str1 123 ...