5299. 找到一个数字的 K 美丽值
字符串处理
class Solution {
public:
int divisorSubstrings(int num, int k) {
string s = to_string(num);
int res = 0;
for(int i=0; i+k <= s.size(); i++){
string t = s.substr(i, k);
int u = stoi(t);
if(u > 0 && num%u == 0){
res++;
}
}
return res;
}
};
6067. 分割数组的方案数
前缀和,枚举
class Solution {
public:
int waysToSplitArray(vector<int>& nums) {
int n = nums.size();
vector<long long> f(n+1);
for(int i=1; i<=n; i++){
f[i] = f[i-1] + nums[i-1];
}
int res = 0;
for(int i=1; i<n; i++){
if(f[i] >= f[n]-f[i]){
res++;
}
}
return res;
}
};
6068. 毯子覆盖的最多白色砖块数
排序 + 双指针
class Solution {
public:
int maximumWhiteTiles(vector<vector<int>>& tiles, int carpetLen) {
sort(tiles.begin(), tiles.end());
int l = 0, r = 0, sum = 0, res = 0, n = tiles.size();
while(r < n){
int left = tiles[l][0], right = left+carpetLen-1;
if(tiles[r][1] <= right){
sum += tiles[r][1] - tiles[r][0]+1;
res = max(res, sum);
r++;
}else{
if(tiles[r][0] < right){
res = max(res, sum + right - tiles[r][0] + 1);
}
sum -= tiles[l][1] - tiles[l][0]+1;
l++;
}
}
return res;
}
};
6069. 最大波动的子字符串
中文翻译有问题,建议看一下英文题目,至少包含2个不同字母,最多字母数和最少字母数差最大, 相同字母,最大和最小相同,所以波动为0, 枚举2个字母从 a-z 组合,统计子字符串最大值。
class Solution {
public:
int largestVariance(string s) {
int res = 0;
for(char a = 'a'; a<='z'; a++){
for(char b ='a'; b<='z'; b++){
int diff = 0, diff_b = -s.size();// 考虑全部为同一个字母的情况,为 0
for(char c : s){
if(c == a){
diff ++ ;
diff_b++;
}else if(c == b){
diff --;
diff_b = diff;
diff = max(diff, 0);
}
res = max(res, diff_b);
}
}
}
return res;
}
};