字符串字典序排列

代码很丑但是能跑

不同于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
}