【問題】
給定兩個字串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,則可以利用雜湊表來代替陣列。
下面是使用python3.5實現的**
#判斷兩個字串是否為變形詞
#使用陣列進行判斷
defisdeformation1
(str1, str2):
if str1 == none
or str2 == none
or len(str1) != len(str2):
return
false
array = [0
for i in range(256)]
for i in range(len(str1)):
array[ord(str1[i])] += 1
for i in range(len(str2)):
array[ord(str2[i])] -= 1
if array[ord(str2[i])] < 0:
return
false
return
true
#使用雜湊表進行判斷
defisdeformation2
(str1, str2):
if str1 == none
or str2 == none
or len(str1) != len(str2):
return
false
map = {}
for i in range(len(str1)):
if str1[i] not
in map:
map[str1[i]] = 1
else:
map[str1[i]] = map[str1[i]] + 1
for i in range(len(str2)):
if str2[i] not
in map:
return
false
else:
map[str2[i]] = map[str2[i]] - 1
if map[str2[i]] < 0:
return
false
return
true
字串 判斷兩個字串是否為變形詞
問題 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false 基本思路...
如何判斷兩個字串是否為換位字串
題目 換位字串是指組成字串的字元相同,但位置不同。例如 由於字串 aaaabbc 與字串 abcbaaa 就是由相同的字元所組成的。因此,他們是換位符。hash統計法 顧名思義將字母hash到乙個key上,然後通過計數去最後比較。由於乙個字母就可以當key,所以直接使用key為uint8 因為直接通...
檢驗兩個字串是否為兄弟字串
如果兩個字串的字元一樣,但是順序不一樣,被認為是兄弟字串,問如何在迅速匹配兄弟字串 如,bad和adb就是兄弟字串 class testbro public static boolean test string str1,string str2 return true 無意中看到的另一種思路,以下為...