Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit aa6b314

Browse files
committed
feat: shortest-to-str
1 parent 9d9e204 commit aa6b314

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

shortest-to-str-821.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
3+
4+
示例 1:
5+
6+
输入: S = "loveleetcode", C = 'e'
7+
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
8+
说明:
9+
10+
字符串 S 的长度范围为 [1, 10000]。
11+
C 是一个单字符,且保证是字符串 S 里的字符。
12+
S 和 C 中的所有字母均为小写字母。
13+
*/
14+
15+
/**
16+
* @param {string} S
17+
* @param {character} C
18+
* @return {number[]}
19+
*/
20+
var shortestToChar = function(S, C) {
21+
var sl = S.length
22+
23+
if (sl === 0) {
24+
return []
25+
}
26+
if (sl.length > 10000) {
27+
S = S.substr(0, 10000)
28+
}
29+
var pos = []
30+
var res = []
31+
// 先走一次循环 存储每个C值的位置 便于比对
32+
for (var i = 0; i < sl; i++) {
33+
if (S[i] === C) {
34+
pos.push(i)
35+
}
36+
}
37+
38+
for (var i = 0; i < sl; i++) {
39+
// 如果这个字符就是C 距离就是0
40+
var char = S[i]
41+
if (char === C) {
42+
res.push(0)
43+
} else {
44+
// 定一个最短距离变量
45+
var shortest = sl
46+
// 循环C位置的数组 找出距离最短的 注意绝对值
47+
for (var j = 0; j < pos.length; j++) {
48+
var diff = pos[j] - i
49+
diff = diff > 0 ? diff : Math.abs(diff)
50+
if (diff < shortest) {
51+
shortest = diff
52+
}
53+
}
54+
res.push(shortest)
55+
}
56+
}
57+
return res
58+
}

0 commit comments

Comments
 (0)