给定一个字符串 S
和一个字符 C
。返回一个代表字符串 S
中每个字符到字符串 S
中的字符 C
的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e' 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
- 字符串
S
的长度范围为[1, 10000]
。 C
是一个单字符,且保证是字符串S
里的字符。S
和C
中的所有字母均为小写字母。
思路,正反两次遍历,保存最小值
func shortestToChar(S string, C byte) []int {
// 声明保存结果的切片
var list1 []int
// range遍历出来的是rune类型,所以C要先转成int32才能比较
c := int32(C)
// 初始化等于C的字符的下标值
tmp := 10001
for k, v := range S {
// 更新最新的等于C的下标值
if (v==c) {
tmp = k
}
// 如果下标仍为初始值,则用10001占位。否则将当前下标和C字符下表差添加进去
if (tmp==10001){
list1 = append(list1, 10001)
}else{
list1 = append(list1, k-tmp)
}
}
// 反向来一次
tmp1 := 10001
length := len(S)
for i:=0;i<length;i++{
if S[length-i-1]==C{
tmp1 = i
}
// 在有C的情况下处理
if tmp1 != 10001{
// 判断值是否小于当前位置的值,如果小于,则更新。
if i-tmp1<=list1[length-i-1]{
list1[length-i-1] = i-tmp1
}
}
}
return list1
}