您的位置:首页 > 其它

Longest Substring with At Least K Repeating Characters

2016-09-08 09:29 405 查看
开始想到了用出现次数小于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);

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: