问题描述:
样例如下:
代码如下:(暴力法和两次扫描法)
import java.util.Arrays;
import java.util.Scanner;
public class ShortestToChar {
//暴力双指针
public static int[] shortestToChar(String s, char c) {
int[] res=new int[s.length()];
for (int i = 0; i =0||right=0&&s.charAt(left)==c){//防止下标溢出
temp=Math.abs(i-left);
break;
}else left--;
if (right= 0; --i) {//从右侧扫描距离右侧字符的最小值,然后取二者的最小值即可
if (s.charAt(i) == c) {
idx = i;
}
res[i] = Math.min(res[i], idx - i);
}
return res;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String s=scanner.nextLine();
String cc=scanner.next();
char c=cc.charAt(0);
System.out.println(Arrays.toString(shortestToChar(s,c)));
System.out.println(Arrays.toString(shortestToChar1(s,c)));
}
}
运行结果如下:



