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

2021-08-06 08:02:05 字數 1707 閱讀 8380

【問題】

給定兩個字串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 無意中看到的另一種思路,以下為...