題目
換位字串是指組成字串的字元相同,但位置不同。例如:由於字串"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...