给定一个字符串 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
中的所有字母均为小写字母。
思路:
- 将C在S中出现的位置保存在数组CArr中。
- 初始化结果数组result。
- 对CArr中的每个元素,计算S的索引与此元素的差值的绝对值,保存最小值。
/**
* @param {string} S
* @param {character} C
* @return {number[]}
*/
var shortestToChar = function(S, C) {
var CArr = []
for (var i in S) { // 将C在S中的位置保存在一个数组里面
if (S[i] === C) {
CArr.push(i);
}
}
var result = [];
var length = S.length;
for (var i = 0; i < length; i++) { // 结果数组初始化
result[i] = length;
}
for (var index of CArr) { // 对每个位置,计算其他元素到这个位置的距离,保存最小值
for (var i = 0, l = S.length; i < l; i ++) {
result[i] = Math.min(Math.abs(i - index), result[i]);
}
}
return result;
};