Go怎么对一个中文字符串进行排列组合?

有一个字符串,比如 “低中高”

想用go实现这个字符串里的三个汉字的所有排列组合情况

网上找了一段代码,但只能传英文字符串

自己改了下代码也没改出来,一跑直接电脑卡死了。。

网上的代码:

func permutation(S string) []string {

if len(S) == 1 {

return []string{S}

}

// 与拼接得到的各个字符串再进行拼接

ret := []string{}

for i, s := range S {

// 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并

tmp := fmt.Sprintf("%s%s", S[:i], S[i+1:])

res := permutation(tmp)

for _, r := range res {

ret = append(ret, fmt.Sprintf("%c%s", s, r))

}

}

return ret

}

我改的代码:

func permutation(S string) []rune {

nameRune := []rune(S)

if len(nameRune) == 1 {

return nameRune

}

// 与拼接得到的各个字符串再进行拼接

ret := []rune{}

for i, s := range nameRune {

// 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并

tmp := fmt.Sprintf("%c%c", nameRune[:i], nameRune[i+1:])

res := permutation(tmp)

for _, r := range res {

ret = append(ret, s, r)

}

}

return ret

}

回答

排列组合,中文字符rune类型处理

image.png

func main() {

fmt.Printf("%+vn", permutation("高中低"))

}

func permutation(S string) []string {

nameRune := []rune(S)

var ret []string

if len(nameRune) == 1 {

ret = append(ret, string(nameRune))

return ret

}

// 与拼接得到的各个字符串再进行拼接

for i, s := range nameRune {

// 差了第i个字符的剩余字符串往下传,并将得到的结果进行合并

var t []rune

t = append(t, nameRune[:i]...)

t = append(t, nameRune[i+1:]...)

res := permutation(string(t))

for _, r := range res {

ret = append(ret, fmt.Sprintf("%s%s", string(s), r))

}

}

return ret

}

以上是 Go怎么对一个中文字符串进行排列组合? 的全部内容, 来源链接: utcz.com/a/44839.html

回到顶部