//将s中==c的记录下来到数组arr中,然后遍历s,对于arr进行二分查找,找到第一个小于该下标的位置,publicint[]shortestToChar(String s,char c){int length = s.length();int[] ans =newint[length];List<Integer> res =newArrayList<>();for(int i =0; i < length; i++){if(s.charAt(i)== c){
res.add(i);}}for(int i =0; i < length; i++){int index =binarySearch(res, i);if(index +1>= res.size()){
ans[i]= i - res.get(index);}elseif(index <0){
ans[i]= res.get(index +1)- i;}else{
ans[i]=Math.min(i - res.get(index), res.get(index +1)- i);}}return ans;}//寻找第一个小于pivot的index,注意不是等于publicintbinarySearch(List<Integer> ans,int pivot){int left =0;int right = ans.size()-1;while(left <= right){int mid =(right - left)/2+ left;if(ans.get(mid)>= pivot){
right = mid -1;}else{
left = mid +1;}}return right;}
两次遍历
class solution {publicint[]shortestToChar(String s,char c){int length = s.length();int[] ans =newint[length];for(int i =0, index =-length; i < length; i++){if(s.charAt(i)== c){
index = i;}
ans[i]= i - index;}for(int i = length -1, index =2* length; i >=0; i--){if(s.charAt(i)== c){
index = i;}
ans[i]=Math.min(ans[i], index - i);}return ans;}}
题目链接我的思路//将s中==c的记录下来到数组arr中,然后遍历s,对于arr进行二分查找,找到第一个小于该下标的位置, public int[] shortestToChar(String s, char c) { int length = s.length(); int[] ans = new int[length]; List<Integer> res = new ArrayList<>(); for