395.至少有K個重複字元的最長子串
阿新 • • 發佈:2018-11-14
找到給定字串(由小寫字元組成)中的最長子串 T , 要求 T 中的每一字元出現次數都不少於 k 。輸出 T 的長度。
示例 1:
輸入:s = "aaabb", k = 3
輸出:3
最長子串為 "aaa" ,其中 'a' 重複了 3 次。
示例 2:
輸入:s = "ababbc", k = 2
輸出:5
最長子串為 "ababb" ,其中 'a' 重複了 2 次, 'b' 重複了 3 次。
class Solution {
public:
int longestSubstring(string s, int k) {
int res = 0, i = 0, n = s.size();
while (i + k <= n) {
int m[26] = {0}, mask = 0, max_idx = i;
for (int j = i; j < n; ++j) {
int t = s[j] - 'a';
++m[t];
if (m[t] < k) mask |= (1 << t);
else mask &= (~(1 << t));
if (mask == 0) {
res = max(res, j - i + 1);
max_idx = j;
}
}
i = max_idx + 1;
}
return res;
}
};