题目:
给你一个字符串 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
}