go语言编写一个函数,判断两个字符串是否是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序
下面实现方法用了两次遍历来完成这题时间复杂度最大为2n,避免两重for循环或者递归n平方的时间复杂度。第一次遍历是把相同的byte作为key,个数作为value存入到map中。第二次遍历取其中一个map的key和value和第二个map相同key的value值做比较。
func comma2(s1string, s2string)bool {
if len(s1) != len(s2) {
return false
}
var s1Map,s2Mapmap[byte]int
s1Map,s2Map =make(map[byte]int),make(map[byte]int)
for i :=0; i < len(s1); i++ {
if _,ok1 :=s1Map[s1[i]];ok1 {
s1Map[s1[i]] +=1
}else {
s1Map[s1[i]] =1
}
if _,ok2 :=s2Map[s2[i]];ok2 {
s2Map[s2[i]] +=1
}else {
s2Map[s2[i]] =1
}
}
for key, value :=range s1Map {
if s2Map[key] != value {
return false
}
}
return true
}