请上传网站应用水印图片,网站数据库模板下载,个人网站设计与制作设计思路,WordPress的好处文章目录 力扣题目工程代码C实现python实现 力扣题目
给你一个长度为 n 下标从 0 开始的字符串 blocks #xff0c;blocks[i] 要么是 ‘W’ 要么是 ‘B’ #xff0c;表示第 i 块的颜色。字符 ‘W’ 和 ‘B’ 分别表示白色和黑色。
给你一个整数 k #xff0c;表示想要 连… 文章目录 力扣题目工程代码C实现python实现 力扣题目
给你一个长度为 n 下标从 0 开始的字符串 blocks blocks[i] 要么是 ‘W’ 要么是 ‘B’ 表示第 i 块的颜色。字符 ‘W’ 和 ‘B’ 分别表示白色和黑色。
给你一个整数 k 表示想要 连续 黑色块的数目。
每一次操作中你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。
示例 1
输入blocks “WBBWWBBWBW”, k 7 输出3 解释 一种得到 7 个连续黑色块的方法是把第 0 3 和 4 个块涂成黑色。 得到 blocks “BBBBBBBWBW” 。 可以证明无法用少于 3 次操作得到 7 个连续的黑块。 所以我们返回 3 。 示例 2
输入blocks “WBWBBBW”, k 2 输出0 解释 不需要任何操作因为已经有 2 个连续的黑块。 所以我们返回 0 。
提示
n blocks.length 1 n 100 blocks[i] 要么是 ‘W’ 要么是 ‘B’ 。 1 k n
工程代码
C实现
class Solution {
public:int minimumRecolors(string blocks, int k) {int minNum INT_MAX;int ans 0;/*先求出前K个窗口中字符W的个数*/for(int i 0; i k; i){if(blocks[i] W){ans;}}minNum ans;/*移动长度为K的滑动窗口*/for(int i k; i blocks.length(); i){/*窗口的第一个字符为W, 窗口中的W个数减1*/if(blocks[i - k] W){ans--;}/*窗口新加入的字符为W, 窗口中的W个数加1*/if(blocks[i] W){ans;}minNum min(minNum, ans);}return minNum;}
};python实现
class Solution:def minimumRecolors(self, blocks: str, k: int) - int:# 求出前k个字符中W的个数minNum ans blocks[:k].count(W)# 移动长度为k的滑动窗口for i in range(k, len(blocks)):# 窗口的第一个字符为W, 窗口中的W个数减1if blocks[i - k] W:ans - 1# 窗口新加入的字符为W, 窗口中的W个数加1if blocks[i] W:ans 1minNum min(minNum, ans)return minNum