leetcode 1513 仅含1的子串数

一、题目描述

二、解题思路

解法一:双指针枚举(超时)

采用双指针枚举所有可能的子串,并用step来记录子串的数量。

解法二:找规律

我们可以采用找规律来解决这个问题,长度为n全为'1'的字符串,有n(n+1)/2个全为'1'的子字符串,所以我们可以利用这个规律,一次遍历s,在过程中统计连续'1'的个数,实时计算仅含'1'的子串的数量。

三、代码实现

解法一:双指针枚举(超时)

cpp 复制代码
class Solution {
public:
    int numSub(string s) {
        //双指针
        int step=0;
        for(int left=0;left!=s.size();left++)
            for(int right=left;right!=s.size();right++){
                if(s[right]=='1') step++;
                else if(s[right]!='1') break;
            }
        return step;
    }
};

解法二:找规律

cpp 复制代码
class Solution {
public:
    int numSub(string s) {
        int ret=0;
        int mod=1e9+7;
        long long count_one=0;

        for(int current=0;current!=s.size();current++){
            if(s[current]=='1') count_one++;
            else{
                ret+=(count_one*(count_one+1)/2)%mod;
                count_one=0;
            }
        }
        //处理最后一段
        ret+=(count_one*(count_one+1)/2)%mod;
        return ret;
    }
};
相关推荐
m沐沐18 分钟前
【深度学习】循环神经网络RNN——结构、原理与长期依赖问题解析
人工智能·pytorch·python·rnn·深度学习·算法·机器学习
古道青阳21 分钟前
Duilib 技术全景剖析
c++·windows
Rabitebla34 分钟前
C++ 内存管理全面复习:从内存分布到 operator new/delete
java·c语言·开发语言·c++·算法·leetcode
玖玥拾42 分钟前
LeetCode 58 最后一个单词的长度
算法·leetcode
SilentSlot1 小时前
【C/C++】手写 DPDK 协议栈(八):用五元组 Hash 加速连接定位
c语言·c++·哈希算法
LONGZETECH1 小时前
工业实训仿真设计实践:电机拆装软件的 DAG 流程建模、工具精度分级与数据体系搭建
大数据·算法·unity·架构·汽车
hanlin031 小时前
刷题笔记:力扣第19题-删除链表的倒数第N个结点
笔记·leetcode·链表
m0_617493941 小时前
Python OpenCV 分水岭算法(Watershed)详解与实战
python·opencv·算法
海带紫菜菠萝汤1 小时前
企业批量PDF翻译方案:从选型到部署的完整指南
人工智能·算法·pdf
jing.wang_20252 小时前
NVIDIA CUDA C++编程环境搭建--Windows + Ubuntu 22.04
c++·windows·ubuntu·gpu算力