0821. Shortest Distance to a Character #
题目 #
- 给定字符串
s
和一个字符c
,且c
是s
中出现过的字符。 - 返回整数数组
answer
,其中answer.length == s.length
且answer[i]
是s
中从下标i
到离他 最近 的字符c
的距离。 - 两个下标
i
和j
之间的 距离 为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;
}
}