給定一個字符串 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
}