题目详情
简单
给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。
输入:
s = "loveleetcode", c = "e"
输出:
[3,2,1,0,1,0,0,1,2,2,1,0]
解释:
字符 ‘e’ 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。
距下标 0 最近的 ‘e’ 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。
距下标 1 最近的 ‘e’ 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。
对于下标 4 ,出现在下标 3 和下标 5 处的 ‘e’ 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。
距下标 8 最近的 ‘e’ 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。
输入:
s = "aaab", c = "b"
输出:
[3,2,1,0]
/**
@ 一小池勺
* @param {string} s
* @param {character} c
* @return {number[]}
@ 2024 1 30
*/
var shortestToChar = function(S, C) {
const resultArray = new Array(S.length).fill(0)
let NowTargetCharC_Index = 0
// 一次遍历
const charArray = Array.from(S) // 将字符串转换为数组
charArray.forEach((item, index) => {
if(item === C) {
resultArray[index] = 0
NowTargetCharC_Index = index
} else {
// 针对当前的 i 元素 => 进行前后距离比较
resultArray[index] = Math.min(Math.abs(S.indexOf(C, index) - index), Math.abs(S.indexOf(C, NowTargetCharC_Index) - index))
}
})
return resultArray
}