字符串字典序排列
代码很丑但是能跑
不同于c++,golang没有set进行去重,我的办法是用map记录每个长度下的结果集,然后将其排序最后拼接到最终结果上
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
input := bufio.NewScanner(os.Stdin)
input.Scan()
req := input.Text()
fmt.Printf("%v", combination(req))
}
func combination(s string) []string {
res := []string{}
markMap := make(map[string]int)
temp := []byte(s)
for i := 1; i < len(s)+1; i++ {
for j := 0; j+i < len(s)+1; j++ {
mark := string(temp[j : j+i])
if _, exist := markMap[mark]; exist {
continue
} else {
markMap[mark] = 1
res = append(res, mark)
}
}
}
record := make(map[int][]string)
for _,v := range res{
record[len(v)] = append(record[len(v)],v)
}
final := []string{}
for i := 1 ;i <=len(s);i++{
sort.Strings(record[i])
final = append(final,record[i]...)
}
return final
}