开始想到了用出现次数小于K的字符做分割符,觉得用map存储出现次数会增加lgn的时间复杂度,也顾忌分割之后每小段还会有出现次数小于K的字符出现,但是没能更进一步想到用用递归和哈希表来解决这两个问题。用递归的时候又蠢得没用分治,用了一颗多叉的递归树,导致分枝控制条件各种复杂,最后还是回归官方答案的分治法了QAQ
class Solution {
public:
int longestSubstring(string s, int k) {
if (s.size() == 0 || k > s.size()) return 0;
if (k == 0) return s.size();
unordered_map<char, int> Map;
for (int i = 0; i < s.size(); i++) {
Map[s[i]]++;
}
int idx = 0;
while (idx < s.size() && Map[s[idx]] >= k) idx++;
if (idx == s.size()) return s.size();
int left = longestSubstring(s.substr(0, idx), k);
int right = longestSubstring(s.substr(idx + 1), k);
return max(left, right);
}
};