有重复字符串的排列组合(golang)

原题:有重复字符串的排列组合

无重复字符串的排列组合(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
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。