1 暴力遍历
func countConsistentStrings(allowed string, words []string) int {
ans := 0
m := make(map[int32]struct{}, len(allowed))
for _, v := range allowed {
m[v] = struct{}{}
}
for _, word := range words {
contain := true
for _, v := range word {
if _, ok := m[v]; !ok {
contain = false
break
}
}
if contain {
ans++
}
}
return ans
}
通过map记录目标字符串的每个字符,再循环words中每个字符串是否都存在与allowed中。时间复杂度为取决于words数组。
2.使用位运算
| 或运算 :有1为1,全0为0
使用一个32位整型变量足以表示26个英文字母,通过|或运算表示字母是否出现过
mark代表allowed出现的字母,mark代表word中出现的字母。最后通过mark1|mark判断mark1中出现的字母是否都在mark中。
func countConsistentStrings(allowed string, words []string) int {
ans := 0
// mark记录allowed中出现的字母
mark := 0
for _,c := range allowed {
mark|= 1 << (c-'a')
}
for _,word := range words {
mark1 := 0
for _,c1 := range word {
mark1 |= 1 << (c1-'a')
}
if mark1|mark == mark {
ans++
}
}
return ans
}