力扣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;
    }
}
相关推荐
偷吃的耗子24 分钟前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
dazzle1 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵1 小时前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann
张张努力变强2 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
张登杰踩2 小时前
MCR ALS 多元曲线分辨算法详解
算法
YuTaoShao2 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法
波波0072 小时前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
风暴之零2 小时前
变点检测算法PELT
算法
深鱼~2 小时前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann