You are given a string containing only 4 kinds of characters 'Q',
'W', 'E'
and 'R'
.
A string is said to be balanced if each of its characters appears n/4
times where n
is the length of the string.
Return the minimum length of the substring that can be replaced with any other string of the same length to make the original string s
balanced.
Return 0 if the string is already balanced.
Example 1:
Input: s = "QWER" Output: 0 Explanation: s is already balanced.
Example 2:
Input: s = "QQWE" Output: 1 Explanation: We need to replace a 'Q' to 'R', so that "RQWE" (or "QRWE") is balanced.
Example 3:
Input: s = "QQQW" Output: 2 Explanation: We can replace the first "QQ" to "ER".
Example 4:
Input: s = "QQQQ" Output: 3 Explanation: We can replace the last 3 'Q' to make s = "QWER".
Constraints:
1 <= s.length <= 10^5
s.length
is a multiple of4
s
contains only'Q'
,'W'
,'E'
and'R'
.
思路:sliding window,关键是怎么判断什么时候移动2个pointer
1. 不要关注window内,转而关注window外
2. window外的count只要没有QWER的count超过len//4就是OK的
from collections import Counter
class Solution(object):
def balancedString(self, s):
"""
:type s: str
:rtype: int
"""
d = Counter(s)
target = len(s)//4
res = len(s)
i = 0
for j,c in enumerate(s):
d[c] -= 1
while i<len(s) and d['Q']<=target and d['W']<=target and d['E']<=target and d['R']<=target:
res = min(res, j-i+1)
d[s[i]] += 1
i += 1
return res