lc2982
二分+定窗
class Solution {
public:
int maximumLength(string s) {
auto check = [&](int mid)->bool {
unordered_map<char, int> fre_map;
for (int i = 0; i < s.length();) {
int l = i;
char c = s[i];
int fre = 0;
while (s[i] == c) {
++i;
}
if (i - l >= mid) {
fre += i - l - mid + 1;
fre_map[c] += fre;
if (fre_map[c] >= 3) {
return true;
}
}
}
return false;
};
int left = 0, right = s.length();
while (left + 1 < right) {
int mid = left + (right - left) / 2;
(check(mid) ? left : right) = mid;
}
return left == 0 ? -1 : left;
}
};
贪心+分类
lc1347
class Solution {
/*
输出:s = "anagram", t = "mangaar"
输出:0
提示:"anagram" 和 "mangaar" 本身就是一组字母异位词
*/
public:
int minSteps(string s, string t)
{
//hash多的不管 少的补
int hash[26];
for(auto& c:t) hash[c-'a']++;
int ret=0;
for(auto& c:s)
if(--hash[c-'a']<0) ret++;
return ret;
}
};