力扣3228——将 1 移动到末尾的最大操作次数

题目

给你一个 二进制字符串 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;
    }
}
相关推荐
阿Y加油吧7 分钟前
力扣打卡——搜索二维矩阵、相交链表
线性代数·leetcode·矩阵
普贤莲花11 分钟前
【2026年第11周---写于20260322】
程序人生·算法·leetcode
小白自救计划14 分钟前
力扣知识点杂集
算法·leetcode·哈希算法
阿贵---17 分钟前
分布式系统C++实现
开发语言·c++·算法
不染尘.18 分钟前
最短路径之Bellman-Ford算法
开发语言·数据结构·c++·算法·图论
big_rabbit050221 分钟前
JVM堆内存查看命令
java·linux·算法
m0_6625779723 分钟前
C++中的RAII技术深入
开发语言·c++·算法
旖-旎23 分钟前
二分查找(点名)(8)
c++·算法·二分查找·力扣
承渊政道26 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
lemonth28 分钟前
图形推理----
人工智能·算法·机器学习