力扣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;
    }
}
相关推荐
科研前沿40 分钟前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨41 分钟前
1931. 用三种不同颜色为网格涂色
算法·leetcode
晨曦夜月1 小时前
map与unordered_map区别
算法·哈希算法
图码2 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler012 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie12 小时前
实数列的常用递推模式
算法
代码小书生2 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星2 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室2 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz2 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva