【Leetcode Daily】1888使二进制字符串字符交替的最少反转次数
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个由 0 和 1 组成的字符串,想把该字符串改造为交替字符串,也就是 0 和 1 交替,但是只能做两个操作,1. 把第一个字符放到最后; 2. 使任意位置字符反转(0和1)。求实现的最少操作二次数。
思路分享
挺绕的,让吃完火锅的脑子转不过来。不过通过滑动窗口能够优雅地解决。
简单说明思路,就是要解决两个问题:如何模拟操作一以及如何模拟操作二。
对于第一个问题,如果真的不断地把第一个字符放最后,也不难,但字符串操作效率不高,通过加倍字符串,然后让窗口直接向后滑动就能模拟每种操作一的情况了。老样子,还是把滑动窗口模板放一下(【Leetcode Daily】1456定长子串中元音的最大数目)。
对于第二个问题,由于连续字符串只有两个情况,010101 和 101010,可以用两个变量,分别存储两种情况下,需要操作二的次数,比如对于 010101,那么下标模 2 为 0 的地方,数值也应为 0,当满足这个条件,对应的变量值就不变,但另外一种情况必定不满足,就加一。
代码解答(强烈建议自行解答后再看)
- 参考解决方案
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!