题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
strInput := scanner.Text()
strSli := strings.Fields(strInput)
if len(strSli) < 1 {
fmt.Printf("strInput not valid")
return
}
n, err := strconv.Atoi(strSli[0])
if err != nil {
fmt.Printf("strconv for n err:%v", err)
return
}
if len(strSli) != (n + 3) {
fmt.Printf("strInput length not valid")
return
}
xStr := strSli[n+1]
kStr := strSli[n+2]
var xCountMap = make(map[string]int)
for _, char := range xStr {
if (char < 'a' || char > 'z') && (char < 'A' || char > 'Z') {
fmt.Printf("current char for xStr not valid")
return
}
if _, ok := xCountMap[string(char)]; ok {
xCountMap[string(char)]++
} else {
xCountMap[string(char)] = 1
}
}
var brothers = make([]string, 0)
for i := 1; i <= n; i++ {
tmp := strSli[i]
tmpCountMap := make(map[string]int)
if len(tmp) != len(xStr) {
continue
}
if tmp == xStr {
continue
}
for _, val := range tmp {
if _, ok := xCountMap[string(val)]; !ok {
continue
}
if _, ok := tmpCountMap[string(val)]; ok {
tmpCountMap[string(val)]++
} else {
tmpCountMap[string(val)] = 1
}
}
if len(tmpCountMap) != len(xCountMap) {
continue
}
var count int
for k, v := range tmpCountMap {
if xVal, ok := xCountMap[k]; !ok {
break
} else {
if v != xVal {
break
}
}
count++
}
if count == len(tmpCountMap) {
brothers = append(brothers, tmp)
}
}
sort.Strings(brothers)
k, err := strconv.Atoi(kStr)
if err != nil {
fmt.Printf("kStr Atoi err:%v", err)
return
}
fmt.Printf("%d\n", len(brothers))
if k < 1 || k > len(brothers) {
//fmt.Printf("kStr not valid, err:%v", err)
return
}
fmt.Printf("%s\n", brothers[k-1])
}
}
