今日简单题:https://leetcode-cn.com/problems/shortest-distance-to-a-character/
今天做了一个复杂度过高的答案,基本是暴力解法了,然后得到了:
超时警告
记录下暴力思路:
1.第一次遍历数组,把字母c的下标记录下来;
2.第二次遍历数组,判断如果前面还有c,同时现在i和第1个c的距离超过了第2个c,就把第1个c换成第2个,然后把i到第1个c的距离存下来;
先贴下超时的答案,明天再研究下题解的双指针和双向遍历方法:
class Solution {
public int[] shortestToChar(String s, char c) {
int[] ch1 = new int[s.length()];
int tail = 0;
for (int i=0; i<s.length(); i++) {
if (s.charAt(i) == c) {
ch1[tail] = i;
tail++;
}
}
int[] ans = new int[s.length()];
int head = 0;
for (int k=0; k<s.length(); k++) {
while (ch1[head+1] !=0) {
if (Math.abs(k-ch1[head]) >= Math.abs(k-ch1[head+1])) {
head++;
}
ans[k] = Math.abs(k-ch1[head]);
}
}
return ans;
}
}
网友评论