问题描述
给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
- 字符串 S 的长度范围为 [1, 10000]。
- C 是一个单字符,且保证是字符串 S 里的字符。
- S 和 C 中的所有字母均为小写字母。
想法
没有更好的想法之前,采取最笨重的方法
想法一:将所有目标char的位置记录,假设n个,遍历整个字符串假设长len,则做len*n次运算比较最小的存起来。
想法一实现
class Solution {
public int[] shortestToChar(String S, char C) {
if (S == null || S.length() == 0) {
return null;
}
int[] ditance = new int[S.length()];//动态new数组,初始值都为0
if (!S.contains(String.valueOf(C))) {
return ditance;
}
List listNum = new ArrayList();
for (int j = 0; j < S.length(); j++) {
if(S.charAt(j)==C){
listNum.add(j);
}
}
for (int t = 0; t < S.length(); t++) {
int min =Integer.MAX_VALUE;
// int min =10001;
for(int k =0;k<listNum.size();k++){
int dis = Math.abs((int)listNum.get(k)-t);
min = Math.min(min,dis);
}
ditance[t]=min;
}
return ditance;
}
}
时间复杂度O(n2)
注
1、求最小的,在初始值设置的时候要引起注意;
若初始值设为0,则最小值都为0,应设为他的最大范围之上,由题意知S 的长度范围为 [1, 10000],最小距离的最大值为10000
但设置成 int min =Integer.MAX_VALUE;最万无一失
2、动态new出来的数组,未赋值时,初始值都为0