# 1888. Minimum Number of Flips to Make the Binary String Alternating ###### tags: `Leetcode` `Medium` `Sliding Window` Link: https://leetcode.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/description/ ## 思路 思路[参考](https://leetcode.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/solutions/1253874/c-solution-sliding-window-o-n-time-o-1-space/) 因为operation1(可以把前面的字符搬到后面去) 所以我们construct a new ```s=s+s``` 然后我们构建两个string 分别是01循环 ```s1```和10循环 ```s2``` 然后我们用sliding window compare ```s1``` and ```s2``` with ```s``` 找出最小需要flip多少个数字 ## Code ```java= class Solution { public int minFlips(String s) { s += s; int n = s.length(); StringBuilder s1 = new StringBuilder(); StringBuilder s2 = new StringBuilder(); for(int i=0; i<n; i++){ s1.append(i%2==0?'0':'1'); s2.append(i%2==0?'1':'0'); } int ans1 = 0, ans2 = 0, ans = Integer.MAX_VALUE; for(int i=0; i<n; i++){ if(s.charAt(i)!=s1.charAt(i)) ans1++; if(s.charAt(i)!=s2.charAt(i)) ans2++; if(i>=n/2){ if(s.charAt(i-n/2)!=s1.charAt(i-n/2)) ans1--; if(s.charAt(i-n/2)!=s2.charAt(i-n/2)) ans2--; } if(i>=n/2-1) ans = Math.min(ans, Math.min(ans1, ans2)); } return ans; } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up