public int[] shortestToChar(String s, char c) {
int n=s.length();
int last=-1;//最近的目标字符下标
int[] ans=new int[n];
//从左向右,求出每个字符到左边最近目标的距离
for(int i=0;i<n;i++){
if(s.charAt(i)==c){
ans[i]=0;
last=i;
}else{
if(last==-1)
ans[i]=n;
else ans[i]=i-last;
}
}
last=-1;
//从右向左,求出每个字符到右边最近目标的距离,并与左距离比较得到较小值
for(int i=n-1;i>=0;i--){
if(s.charAt(i)==c){
last=i;
}else{
if(last==-1)
ans[i]=Math.min(ans[i],n);
else ans[i]=Math.min(ans[i],last-i);
}
}
return ans;
}
03-04
133
02-28
573
04-06
376
10-29
254