题解 | 宝石手串

宝石手串

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))
	}
}

全部评论

相关推荐

FightingNa...:小厂不喜欢离毕业还远的。培养你三个月小半年,你又回去上学,你丰富简历爽歪歪,小厂啥也得不到。大厂兴许愿意培养你,可以试试大厂,准备下不黑了就行。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务