LeetCode 821: 字符的最短距离
☀️ 解题思路:
(1)可以将问题理解为:两个路径比较大小的问题,与左目标值的距离和与右坐标值的距离
(2)设置一个结果集数组,从左向右遍历字符串,记录当前假设目标值在左边,当前位置字符与目标值位置的距离,如果遇到了目标值,就更新目标值的位置
(3)同理,从右向左遍历字符串,记录下的距离与原来记录的距离相比较,用小的值更新原来的值。此处利用了Java中的Math.min()
方法
(4)最后返回数组
⛄️ 代码部分:
class Solution {
public int[] shortestToChar(String s, char c) {
//定义一个结果数组
int len = s.length();
int [] arr = new int[len];
//从左向右遍历字符串
for(int i = 0, index = - len; i < len; i++){
if(s.charAt(i) == c){
index = i;
}
arr[i] = i - index;
}
//从右向左遍历字符串
for(int j = len - 1, index = 2 * len; j >= 0; j--){
if(s.charAt(j) == c){
index = j;
}
arr[j] = Math.min(index - j, arr[j]);
}
return arr;
}
}