原题:有重复字符串的排列组合
与无重复字符串的排列组合(golang)类似,只是由于golang没有set,需要把[]string存储改为用map存储,字符串作为map的key存储,map的val用不占用内存空间的bool类型就行,最后将map的key遍历返回即可。
func permutation(S string) []string {
// 使用map存储,这样就能排除重复数据,最后遍历map,取出所有的key
m := make(map[string]bool)
m[S] = true
l := len(S)
for i := 0; i < l-1; i ++ {
for j := i + 1; j < l; j ++ {
for s, _ := range m { // 为每个已存在的字符串交换ij字符的位置
t := []byte(s)
t[i], t[j] = t[j], t[i]
m[string(t)] = true
}
}
}
ret := make([]string, len(m))
i := 0
for s, _ := range m {
ret[i] = s
i ++
}
return ret
}
有疑问加站长微信联系(非本文作者)