输入一个字符串,输出该字符串中相邻字符的所有组合。
举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)(40分)
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
var s string
fmt.Scan(&s)
res := getStr(s)
sort.Slice(res, func(i, j int) bool {
return len(res[i]) < len(res[j])
})
sort.SliceStable(res, func(i, j int) bool {
if len(res[i]) == len(res[j]) {
return res[i]+res[j] < res[j]+res[i]
}
return false
})
fmt.Println(strings.Join(res, " "))
}
func getStr(s string) []string {
res := make([]string, 0)
m := make(map[string]bool)
for i := 0; i < len(s); i++ {
if !m[string(s[i])] {
res = append(res, string(s[i]))
m[string(s[i])] = true
}
for j := i + 1; j <= len(s); j++ {
if !m[s[i:j]] {
res = append(res, s[i:j])
m[s[i:j]] = true
}
}
}
return res
}