https://leetcode-cn.com/problems/shortest-distance-to-a-character/
    [制卡]

    1. /**
    2. * 总体思路 双数组 双指针
    3. *
    4. * 先获取到对应的字母位于数组中的所有下标idxs
    5. * 重新遍历 s,从idxs[0]和idxs[1]开始,用 last 和next存储当前对比的下标,
    6. * idx 存储当前对比的索引,用当前下标对比,取 prev-i 和 next-i的绝对值中较小的一个放入结果中
    7. * 当i === next的时候, -重置last, next ,idx
    8. */
    9. export function shortestToChar(s: string, c: string): number[] {
    10. if(!s.length) return []
    11. let res: number[] = []
    12. let idxs: number[] = []
    13. for (let i = 0; i < s.length; i++) {
    14. if (s[i] === c) idxs.push(i)
    15. }
    16. if(!idxs.length) return []
    17. idxs.push(999999999)
    18. let prev = idxs[0]
    19. let next = idxs[1]
    20. let idx = 1
    21. for (let i = 0; i < s.length; i++) {
    22. // 这一步技巧
    23. res.push(Math.min(Math.abs(prev-i),next-i))
    24. if (i === next) {
    25. prev = next
    26. idx++
    27. next = idxs[idx]
    28. }
    29. }
    30. return res
    31. }
    /**
     * 还是错了。在取 i - index[0] 和 i - index[1]的绝对值中较小的一个放入结果中没弄明白;
     * @param s
     * @param c
    
     function shortestToChar(s: string, c: string): number[] {
      let res: number[] = []
      let i = 0; //
      let j = -1; // 记录上一个 c 的位置
      let n = 0;
      let resBack: number[] = [];//  缓存
      for (; i < s.length; i++) {
        if (s[i] === c) {
          const abs = Math.abs(i - j)
          if (abs === 0) {
            res.push(0)
          } else {
            if (j < 0) {
              n = i
              for (let k = n; k > 0; k--) {
                resBack.push(k)
              }
              res = resBack.reverse().concat(res)
              n = 0
              resBack = []
            }
            if (j >= 0 && j < i) {
              n = abs % 2 ? abs : abs + 1
              let midkey = Math.floor(n / 2)
              for (let k = 1; k < midkey; k++) {
                resBack.push(k)
              }
              for (let k = midkey; k > 0; k--) {
                resBack.push(k)
              }
              res = resBack.concat(res)
              n = 0
              resBack = []
            }
            if (j === i) {
              res.push(0)
            }
            j = i
          }
        }
      }
      return res
    };
     */