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

题目

给你一个 二进制字符串 s。

你可以对这个字符串执行 任意次 下述操作:

选择字符串中的任一下标 i( i + 1 < s.length ),该下标满足 si == '1' 且 si + 1 == '0'。

将字符 si 向 右移 直到它到达字符串的末端或另一个 '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

si 为 '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;
    }
}
相关推荐
Dola_Zou1 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
啦啦啦啦啦zzzz2 小时前
Logger的组装(c++20)
c++·算法·c++20
尾善爱看海3 小时前
前端算法与手写题集
前端·算法
程序员阿鹏4 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
AI 思录4 小时前
Prompt 事故档案(八):日常表达被标为“待校准”,AI 的爹味语法从哪里来
大数据·人工智能·算法·prompt·用户体验·ai合规
月光船幽幽4 小时前
跨范式映射的稳定接口设计
人工智能·python·算法
2601_965742226 小时前
全媒体运营与短视频代运营,两者有什么区别?
大数据·数据结构·人工智能·算法·ai·媒体
wordbaby7 小时前
混合检索:两全其美的艺术
人工智能·算法
彧azz7 小时前
数据结构:关于图的学习
c语言·数据结构·笔记·学习·算法
热心网友俣先生7 小时前
A题-药材的烘干问题-题意逐句翻译
算法·数学建模