字符的最短距离
-
题目:给你一个字符串 s s s 和一个字符 c c c ,且 c c c 是 s s s 中出现过的字符。
-
返回一个整数数组 a n s w e r answer answer ,其中
answer.length == s.length
且answer[i]
是 s s s 中从下标i
到离它最近的字符 c c c 的距离 。 -
两个下标
i
和j
之间的 距离 为abs(i - j)
,其中 abs 是绝对值函数
// 双指针法,记录每次字符 c 出现的位置和上一次出现的位置,同时每次更新最近距离数组
func shortestToChar1(s string, c byte) []int {
arr := make([]int, len(s))
for i, previous := 0, -1; i < len(s); i++ {
if s[i] == c {
if previous == -1 {
for j := i; j >= 0; j-- {
arr[j] = i - j
}
} else {
for j := i; j > (i+previous-1)/2; j-- {
arr[j] = i - j
}
}
previous = i
} else {
arr[i] = i - previous
}
}
return arr
}
// 正反遍历,对比任意字符距离左右字符 c 的最短距离同时更新最短距离数组
func shortestToChar(s string, c byte) []int {
arr := make([]int, len(s))
for i, previous := 0, -1; i < len(s); i++ {
arr[i] = -1
if s[i] == c {
arr[i] = 0
previous = i
} else {
arr[i] = i - previous
}
}
for i, previous := len(s)-1, -1; i >= 0; i-- {
if s[i] == c {
previous = i
} else if temp := previous - 1; temp < arr[i] {
arr[i] = temp
}
}
return arr
}