新干县城乡建设局网站,oa网站建设价格,vx小程序怎么做,网站管理建设总结1. 题目
有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符#xff0c;且长度为 n 的字符串。
假如在该字符串中#xff0c;这四个字符都恰好出现 n/4 次#xff0c;那么它就是一个「平衡字符串」。
给你一个这样的字符串 s#xff0c;请通过「替换一个子串」的方式且长度为 n 的字符串。
假如在该字符串中这四个字符都恰好出现 n/4 次那么它就是一个「平衡字符串」。
给你一个这样的字符串 s请通过「替换一个子串」的方式使原字符串 s 变成一个「平衡字符串」。
你可以用和「待替换子串」长度相同的 任何 其他字符串来完成替换。
请返回待替换子串的最小可能长度。
如果原字符串自身就是一个平衡字符串则返回 0。
示例 1
输入s QWER
输出0
解释s 已经是平衡的了。示例 2
输入s QQWE
输出1
解释我们需要把一个 Q 替换成 R
这样得到的 RQWE (或 QRWE) 是平衡的。示例 3
输入s QQQW
输出2
解释我们可以把前面的 QQ 替换成 ER。 示例 4
输入s QQQQ
输出3
解释我们可以替换后 3 个 Q使 s QWER。提示
1 s.length 10^5
s.length 是 4 的倍数
s 中只含有 Q, W, E, R 四种字符来源力扣LeetCode 链接https://leetcode-cn.com/problems/replace-the-substring-for-balanced-string 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
对所有的字符计数QWER窗口[i,j]内的字符数减去窗口外的计数满足要求左端点右移不满足右端点右移
class Solution { // c
public:int balancedString(string s) {int n s.size(), Q 0, W 0, E 0, R 0;int nt n2;int i 0, j, minlen n;for(i 0; i n; i){ //获取计数if (s[i] Q) Q;else if (s[i] W) W;else if (s[i] E) E;else R;}if(Qnt Wnt Ent Rnt)return 0;//已平衡满足for(i 0, j 0; j n; j){if(Q nt || W nt || E nt || R nt){ //窗口外多了进入窗口一个窗口外少了计数-1if (s[j] Q) Q--;else if (s[j] W) W--;else if (s[j] E) E--;else R--;}while(i n (Q nt W nt E nt R nt)){ //窗口外满足条件我要尽可能的让窗口小让左端点出去窗口外计数1minlen min(minlen, j-i1);if (s[i] Q) Q;else if (s[i] W) W;else if (s[i] E) E;else R;i;}}return minlen;}
};16 ms 7.9 MB
class Solution: # py3def balancedString(self, s: str) - int:n len(s)Q 0W 0E 0R 0nt n2for i in range(n):if s[i] Q:Q 1elif s[i] W:W 1elif s[i] E:E 1else:R 1if Qnt and Wnt and Ent and Rnt:return 0;i 0minlen nfor j in range(n):if Q nt or W nt or E nt or R nt:# 窗口外多了进入窗口一个窗口外少了计数-1if s[j] Q:Q - 1elif s[j] W:W - 1elif s[j] E:E - 1else:R - 1while i n and (Q nt and W nt and E nt and R nt):# 窗口外满足条件我要尽可能的让窗口小让左端点出去窗口外计数1minlen min(minlen, j-i1)if s[i] Q:Q 1;elif s[i] W:W 1elif s[i] E:E 1else:R 1;i 1;return minlen216 ms 14.3 MB