题目
给你一个 二进制字符串 s。
你可以对这个字符串执行 任意次 下述操作:
选择字符串中的任一下标 i( i + 1 < s.length ),该下标满足 s[i] == '1' 且 s[i + 1] == '0'。
将字符 s[i] 向 右移 直到它到达字符串的末端或另一个 '1'。例如,对于 s = "010010",如果我们选择 i = 1,结果字符串将会是 s = "000110"。
返回你能执行的 最大 操作次数。
示例
示例 1:
输入: s = "1001101"
输出: 4
解释: 可以执行以下操作:
选择下标 i = 0。结果字符串为 s = "0011101"。
选择下标 i = 4。结果字符串为 s = "0011011"。
选择下标 i = 3。结果字符串为 s = "0010111"。
选择下标 i = 2。结果字符串为 s = "0001111"。
示例 2:
输入: s = "00111"
输出: 0
提示
1 <= s.length <= 10^5
s[i] 为 '0' 或 '1'。
思路
对于 1001101,从左到右计算连续的1,1001101连续1为1次
对于 0011101,从左到右计算连续的1,0011101连续1为3次
对于 0001111,从左到右计算连续的1,0001111连续1为4次,但是不可移动
因此总移动次数sum = 1+ 3 = 4
代码
java
class Solution {
public int maxOperations(String s) {
char[] s1 = s.toCharArray();
int sum = 0;
int lianxu_one = 0;
int jingwei = 0;
for(int i=0;i<s.length();i++){
if(s1[i]=='1'){
lianxu_one++;
jingwei = 1;
}
else{
if(jingwei == 1)
sum += lianxu_one;
jingwei = 0;
}
}
return sum;
}
}