My code:
public class Solution {
public int longestSubstring(String s, int k) {
if (s == null || s.length() < k) {
return 0;
}
return helper(s.toCharArray(), 0, s.length() - 1, k);
}
private int helper(char[] arr, int start, int end, int k) {
if (end - start + 1 < k) {
return 0;
}
int[] dict = new int[26];
for (int i = start; i <= end; i++) {
dict[arr[i] - 'a']++;
}
for (int i = 0; i < 26; i++) {
if (dict[i] == 0) {
continue;
}
else if (dict[i] < k) {
for (int j = start; j <= end; j++) {
if (arr[j] == (char) ('a' + i)) {
int left = helper(arr, start, j - 1, k);
int right = helper(arr, j + 1, end, k);
return Math.max(left, right);
}
}
}
}
return end - start + 1;
}
}
reference:
https://discuss.leetcode.com/topic/57372/java-3ms-divide-and-conquer-recursion-solution
这种方法思路我还是第一次见到,挺巧的。
现在刷Leetcode,基本上是新题看一遍,5秒内没思路就直接看答案了。
有人问我,你这样刷,有意义吗?
没意义。
但,刷题本身,有意义吗?
除了Google,大多数公司都是考原题,为什么不把刷题当作GRE来准备呢?
这是 规则。 世道如此,不要再犯傻了。
Anyway, Good luck, Richardo! — 10/14/2016