0821. Shortest Distance to a Character

0821. Shortest Distance to a Character #

题目 #

  • 给定字符串 s 和一个字符 c,且 cs 中出现过的字符。
  • 返回整数数组 answer,其中 answer.length == s.lengthanswer[i]s 中从下标 i 到离他 最近 的字符 c 的距离。
  • 两个下标 ij 之间的 距离abs(i - j),其中 abs 是绝对值函数。

思路 #

双向遍历 #

BFS #

代码 #

双向遍历 #

class Solution {
    public int[] shortestToChar(String s, char c) {
        /** 双向扫描数组 */
        int[] ans = new int[s.length()];
        for (int i = 0; i < ans.length; i++) ans[i] = Integer.MAX_VALUE;
        int ptr = -1;
        /** 从后向前扫描数组 */
        for (int i = s.length() - 1; i >= 0; i--) {
            if (s.charAt(i) == c) ptr = i;
            if (ptr >= i) ans[i] = ptr -i;
        }
        /** 从前向后扫描数组 */
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == c) ptr = i;
            if (ptr <= i) ans[i] = Math.min(ans[i], i - ptr);
        }
        return ans;
    }
}

BFS #