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类型处理
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