1. 题目描述
  2. 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
  3. 示例 :
  4. 输入: S = "loveleetcode", C = 'e'
  5. 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
  6. 说明:
  7. - 字符串 S 的长度范围为 [1, 10000]。
  8. - C 是一个单字符,且保证是字符串 S 里的字符。
  9. - S C 中的所有字母均为小写字母。
  10. var shortestToChar = function (S, C) {//TODO}

我的回答

参考回答

// 思路:分别寻找每个字符左右的对短距离并取最小值

  1. var shortestToChar = function (S, C) {
  2. let arr = S.split('')
  3. let res = []
  4. for (let i = 0; i < arr.length; i++) {
  5. let n = -1
  6. // 寻找右边最短距离
  7. for (let j = i; j < arr.length; j++) {
  8. if (arr[j] == C) {
  9. n = (j - i) break
  10. }
  11. }
  12. // 寻找左边最短距离, 并且和右边最短距离进行对比
  13. for (let k = i; k >= 0; k--) {
  14. if (arr[k] == C) {
  15. if (n == -1) {
  16. n = (i - k)
  17. } else {
  18. n = Math.min((i - k), n)
  19. }
  20. break
  21. }
  22. }
  23. res.push(n)
  24. }
  25. return res
  26. };