您现在的位置是:首页 > Javascript
当前栏目
【LeetCode】每日一题(3)
2023-04-18 16:29:31 时间
目录
题目:1234. 替换子串得到平衡字符串 - 力扣(Leetcode)
题目:1234. 替换子串得到平衡字符串 - 力扣(Leetcode)
题目的接口:
class Solution {
public:
int balancedString(string s) {
}
};
解题思路:
这个题目就是让我们求出需要替换子串的最小长度,
我也想不出什么牛逼的解法,
所以就老老实实用哈希和滑动窗口来做,
然后控制一下边界,
具体思路就是:
1. 用一个哈希map存放原字符串以及每个字符的个数,
2. 然后实现一个是否需要替换的的函数,
3. 最后用滑动窗口的思想:
匹配不了 j 就加加,
j 遇到对应字符,该字符就减减,
匹配成功记录下来,然后让 i 加加,看看还有没有更少的替换次数。
i 遇到对应字符,该字符就加加,
直到 j 到边界,且比配失败,将记录的最少的替换次数返回即可。
代码:
class Solution {
public:
//判断字符串是否平衡
bool is_balance(int m, unordered_map<char, int>& mp)
{
for(const auto& it : mp)
{
//如果字符个数大于n/4,当然不平衡
if(it.second > m)
{
return false;
}
}
//字符个数都等于n/4,平衡了
return true;
}
int balancedString(string s) {
int n = s.size();
int m = n / 4;
//建一个哈希map
unordered_map<char, int> mp;
//把字符都存进去
for(char e : s)
{
mp[e]++;
}
//用这个判断函数判断是否已经匹配成功
if(is_balance(m, mp))
{
return 0;
}
//这里创建ret为一个很大的数,用来作为初始的比较数
int i = 0, j = 0, ret = INT_MAX, breakcnt = 0;
//滑动窗口[i, j)
while(i < n)
{
//如果平衡,动i,看看还有没有更优解
if(is_balance(m, mp))
{
int tmp = j - i;
//记录最小替换次数
ret = min(ret, tmp);
//下标i离开了s[i],让该字符数量++(因为不替换这个字符了)
mp[s[i]]++;
i++;
}
else
{
if(j < n)//j到边界就停下来
{
//下标j往后移动,让该字符数量--(在滑动窗口内的字符是要被替换的)
mp[s[j]]--;
j++;
}
else//j到边界了
{
breakcnt++;
//先别直接break,让窗口再匹配一次,看看还有没有更优解
//如果没有,第二次到这里就break。
if(breakcnt > 1)
{
break;
}
}
}
}
//返回记录的最小替换次数
return ret;
}
};
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。
相关文章
- 前端面试 【JavaScript】— typeof 是否能正确判断类型?
- 前端面试 【JavaScript】— instanceof 能否判断基本数据类型?
- 前端面试 【JavaScript】— 能不能手动实现一下 instanceof 的功能?
- 前端面试 【JavaScript】— Object.is和=== 有什么区别?
- 前端面试 【JavaScript】— JS中类型转换有哪几种?
- 前端面试 【JavaScript】— == 和 ===有什么区别?
- 前端面试 【JavaScript】— 对象转原始类型是根据什么流程运行的?
- JavaScript 的 parseInt() 函数
- javascript实现两个数字进行组合
- JS监听键盘按键
- 大前端开发中的路由管理之五:Flutter篇
- Javascript的DOM操作
- 在Vue项目中使用WebSocket技术
- 新手向:前端程序员必学基本技能——调试JS代码
- React 毁了 Web 开发!
- 「JS 逆向百例」cnki 学术翻译 AES 加密分析
- 商标注册域名后缀用什么?商标和域名有哪些区别?
- 网站建设流程是怎样的?需要看重哪些细节?
- 网站域名商标注册流程是什么?网站域名商标有什么用?
- 如何建设一个实用性强的网站 网站上线后如何运营