如何判斷兩個字串是否為換位字串

2021-10-19 07:31:15 字數 1452 閱讀 3029

題目

換位字串是指組成字串的字元相同,但位置不同。例如:由於字串"aaaabbc"與字串「abcbaaa」就是由相同的字元所組成的。因此,他們是換位符。

hash統計法

顧名思義將字母hash到乙個key上,然後通過計數去最後比較。由於乙個字母就可以當key,所以直接使用key為uint8(因為直接通過string下標取,取的是字母的ascii碼),value為int的map即可。通過遍歷字串,然後通過統計的加減,最後通過遍歷map,看是否有不為0的count,如果有就代表兩個字串不是換位符。

時間複雜度:o(n)

空間複雜度:o(n)

func

charcompare

(a,b string

)bool

iflen

(a)==1&&

len(b)==1

return

true

}var

( charcountmap =

make

(map

[uint8

]int,0

))for i :=

0; i <

len(a)

; i++

for_

, v :=

range charcountmap

}return

true

}

陣列對位法

在上面的方法已經提到了遍歷字串,取下標對應的字元時,是取到對應字元的ascii,所以可以利用這個特性,宣告乙個長度為256的array。遍歷字串時,直接通過對ascii的count加減。再利用go array可以直接比對的特性,和[256]int{}初始狀態比較一下就行

時間複雜度:o(n)

空間複雜度:o(n),n=256

func

charcomparebyarray

(a, b string

)bool

iflen

(a)==1&&

len(b)==1

return

true

}var

( chararray =

[256

]int

)for i :=

0; i <

len(a)

; i++

if chararray ==

[256

]int

else

}

這題原本是3個for,乙個for在統計a的字元數量,然後再乙個for去遍歷b,減對應位置的統計數量,最後乙個for遍歷這個chararray判斷是否不為0的字元。

通過優化之後減少了兩個for: 總結

這題其實不難,主要是利用ascii對應array index的乙個思路,利用乙個長度為256的陣列進行統計。利用這個特性,可以在後面解決問題的時候多乙個思路。

python實現判斷兩個字串是否為換位字串

題目描述 換位字串是指組成字串的字元相同,但位置不同。例如 由於字串 aaaabbc 與字串 abcbaaa 就是由相同的字元所組成的,因此它們是換位字元。分析與解答 在演算法設 計中,經常會採用空 間換時間的方法以降低時間 複雜度,即通過增加額外的存 儲空間來達到優化演算法效能的目的。就本題而言,...

判斷兩個字串是否為包含關係

題目描述 假設這有乙個各種字母組成的字串a,和另外乙個字串b,字串裡b的字母數相對少一些。什麼方法能最快的查出所有小字串b裡的字母在大字串a裡都有?比如,如果是下面兩個字串 string 1 abcdefghlmnopqrs string 2 dcgsrqpo 答案是true,所有在string2裡...

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

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