字符的最短距离
难度:简单
起始令所有res[i]为-1,将所有的c字符下标入队,并更新res[i]=0,bfs遍历,通过res[i]是否为-1判断是否入队。
代码如下:
public int[] shortestToChar(String s, char c) {
int len = s.length();
int[] res = new int[len];
Arrays.fill(res,-1);
Deque<Integer> deque = new ArrayDeque();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)==c){
res[i] = 0;
deque.add(i);
}
}
while (!deque.isEmpty()){
int poll = deque.poll();
if (poll+1<len && res[poll+1]==-1){
res[poll+1] = res[poll]+1;
deque.add(poll+1);
}
if (poll-1>=0 && res[poll-1]==-1){
res[poll-1] = res[poll]+1;
deque.add(poll-1);
}
}
return res;
}