
假设x的出现次数<k,那么x就不可能出现在最长子串中,以x为界,分为左子串和右子串,再分别求左子串和右子串的最长子串。
int longestSubstring(string s, int k) {
if(k<=1) return s.size();
if(s.empty() || s.size()<k) return 0;
unordered_map<char,int> m;
for(char c:s)
++m[c];
int i=0;
for(;i<s.size() && m[s[i]]>=k;++i);
if(i == s.size()) return s.size();
int l = longestSubstring(s.substr(0,i),k);
for(;i<s.size() && m[s[i]]<k;++i);
int r = longestSubstring(s.substr(i),k);
return max(l,r);
}
本文深入探讨了寻找字符串中字符出现次数大于等于k的最长子串的算法实现。通过递归方式,以出现次数小于k的字符为边界,将问题分解为左右两个子串的最长子串求解。
466

被折叠的 条评论
为什么被折叠?



