题解 | #字符统计# golang
字符统计
http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
package main import( "bufio" "os" "fmt" "sort" ) type SortWord struct{ Word string Count int } type sortW []SortWord func (s sortW) Len() int{return len(s)} func (s sortW) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s sortW) Less(i, j int) bool { if s[i].Count == s[j].Count { return s[i].Word < s[j].Word }else{ return s[i].Count > s[j].Count } } func newWordSort(m map[string]int) []string { var w []string for loop, _ := range m { w = append(w, string(loop)) } sort.Strings(w) return w } func newValueSort(m map[string]int, w []string) sortW { tmpWs := make(sortW, 0) for loop := 0; loop< len(w); loop++{ tmpW := SortWord{ Word : w[loop], Count : m[w[loop]], } tmpWs = append(tmpWs, tmpW) } sort.Sort(tmpWs) return tmpWs } func strDic(s string) string{ var tmpStr string tmpMap := make(map[string]int) for loop := range s { tmpMap[string(s[loop])]++ } newMap := newValueSort(tmpMap, newWordSort(tmpMap)) for _, v := range newMap{ tmpStr += string(v.Word) } return tmpStr } func main(){ var params []string input := bufio.NewScanner(os.Stdin) for input.Scan(){ params = append(params, input.Text()) } for loop:= 0; loop< len(params); loop++{ res := strDic(params[loop]) fmt.Println(res) } }