LeetCode 题解:1234. 替换子串得到平衡字符串,滑动窗口,详细注释
原题链接:https://leetcode.cn/problems/replace-the-substring-for-balanced-string/
解题要点:
我们从字符串中截取一部分
m
,只要剩下的部分每个字符的数量都小于n / 4
,就表示s
能够通过替换m
个字符,变为“平衡字符串”使用两个指针
left
和right
,将两者之间长度为right - left + 1
的字符串当做一个窗口,即可在s
中截取出长度为m
的字符串窗口的右边界
right
从0
开始一直移动到n - 1
位置,左边界left
跟随right
移动,查找合适的窗口当窗口移动到最右侧时,例如
s = "QQWQQEQR"
,窗口到最右侧时,left = 4; right = 7
,此时在窗口中的字符串为QEQR
,窗口即使继续向右移动,也无法满足上述条件,直接退出循环即可
解题思路:
先用
map
统计字符串s
中各个字符的数量如果
QWER
中每个字符的数量都是n / 4
,表示s
就是“平衡字符串”创建
left
和right
指针,right
从左向右移动,同时left <= right
每次
right
向右移动一位,就将map[s[right]]
的数量减一,表示有字符移入窗口每次
left
向左移动一位,就将map[s[left++]]
加一,表示有字符移出窗口每次移入移出操作后,
map
中剩下的字符,就是窗口外的字符数量,因此只要判断QWER
的数量是否小等于n / 4
即可
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/87848ac4c8f7688f4163631d2】。文章转载请联系作者。
评论