字母異位詞
字母異位詞即兩個(gè)字符串中每種字符的個(gè)數(shù)相等,類似于同一個(gè)字符串不同的字符順序,如:
aaabbccc和babaccac 是字母異位詞
aaabb 和aabbb 則不是字母異位詞
來源:https://leetcode-cn.com/problems/valid-anagram/
問題
判斷兩個(gè)字符串是否為字母異位詞
思路
字母異位詞具有一個(gè)特性就是:每種字符的個(gè)數(shù)相等
所以可以統(tǒng)計(jì)兩個(gè)字符串中每種字符的個(gè)數(shù),如果每種字符的個(gè)數(shù)相等,則是字母異位詞
工具:map
實(shí)現(xiàn)
fun isAnagram(s: String, t: String): Boolean {
if (s.length != t.length) {//如果兩個(gè)字符串長(zhǎng)度都不一樣,不用比了,肯定不是
return false
}
val sMap = HashMap<Char, Int>()
s.toCharArray().forEach {//遍歷s字符串,統(tǒng)計(jì)其字符種類和個(gè)數(shù)
val value: Int? = sMap[it]
sMap[it] = if (value == null) 1 else value + 1
}
t.toCharArray().forEach {//再遍歷t字符串
val value = sMap[it] ?: return false//t字符串中有字符在s中沒有,則肯定不是字母異位詞
sMap[it] = value - 1//將map中字符種類的個(gè)數(shù)減1,如果最后map中存在不為0的,則說明兩個(gè)字符串的該字符種類的個(gè)數(shù)不一致
}
for (value in sMap.values) {
if (value != 0) {
return false
}
}
return true
}