题解 | 宝石手串
宝石手串
https://www.nowcoder.com/practice/9648c918da794be28575dd121efa1c50
package main
import (
"fmt"
)
func minDistence(str string) int {
nStr := str + str
m := make(map[rune][]int, len(str))
for k, v := range nStr {
if _, ok := m[v]; !ok {
vSli := make([]int, 0, len(str))
vSli = append(vSli, k)
m[v] = vSli
} else {
m[v] = append(m[v], k)
}
}
min := len(str)
for _, v := range m {
if len(v) < 2 {
continue
}
for i := 0; i < len(v)-1; i++ {
if v[i+1]-v[i] < min {
min = v[i+1] - v[i]
}
}
}
if min >= len(str) {
return -1
}
return min-1
}
func main() {
var t int
fmt.Scan(&t)
for i := 0; i < t; i++ {
var n int
fmt.Scan(&n)
var str string
fmt.Scan(&str)
fmt.Println(minDistence(str))
}
}