解法一

开头的0都可以忽略,这些都不需要翻转。然后统计后续的连续相同子串个数即为需要翻转的次数,这是两次翻转保持原值的性质可以得到的。
写法上还可以更简洁,比如开头加上一个"1" ,然后直接比较前后两位是否相同计算。

  1. class Solution {
  2. public int minFlips(String target) {
  3. int i;
  4. int start = target.indexOf('1');
  5. if (start < 0) {
  6. return 0;
  7. }
  8. char ch = '1';
  9. int ans = 1;
  10. for (i = start; i < target.length(); ++i) {
  11. if (target.charAt(i) == ch) {
  12. continue;
  13. }
  14. ch = target.charAt(i);
  15. ++ans;
  16. }
  17. return ans;
  18. }
  19. }