821.字符的最短距离

62 阅读1分钟

题目:
给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。

两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。
算法:
方法一:中心扩散法

func shortestToChar(s string, c byte) []int {
	ans := make([]int, len(s))
	n := len(s)
	for i := range ans {
		ans[i] = math.MaxInt64
	}
	for i := 0; i < n; i ++ {
		
		if s[i] == c {
			ans[i] = 0
			for j := i - 1; j >= 0 && s[j] != c; j -- {
				ans[j] = min(ans[j], i - j)
			}
			for k := i + 1; k < n && s[k] != c; k ++ {
				ans[k] = min(ans[k], k - i)				
			}
		} 
	}
	return ans
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}