class Solution {public:int numSub(string s) {long long count = 0;int ret = 0;// //子串为 "1"// for(char ch : s){//     if(ch == '1')//     count = count % (10e9 + 7) + 1;// }// for(int i = 0;i < s.size()-1;i++){//     if(s.substr(i,2))// }for(int len = 1;len <= s.size();len++){string model(len,'1');for(int i = 0;i <= s.size()-len;i++){if(s.substr(i,len) == model){count = count % 1000000007 + 1;}}}ret = count % 1000000007;return ret;}
};

时间复杂度为 O(n^2),所以当数组特别特别长的时候,循环非常的难

我换了一种方法。将字符串每次遇到 0 都切割成连续为 1 的子串,统计每个子串出现的次数,并且计算每个子串含1的子串个数(等差数列求和 n(n+1)/2)
总的子串个数 = 每个子串的子串个数 * 子串出现的次数

class Solution {public:int numSub(string s) {map<int,int> my_map;//第一个int统计连续1的字符串的长度,第二个int统计这样的子串的出现次数int i = 0;int ret = 0;long long ans = 0;while(i < s.size()){int len = 0;while(s[i] == '1'){++len;  ++i;              }my_map[len]++;while(s[i] == '0')++i;}for(auto it = my_map.begin();it != my_map.end();it++){ans += getCount(it->first) * it->second;ans %= 1000000007;}ret = ans % 1000000007;return ret;}int getCount(int n){int ret = 0;for(int i = 1;i <= n;i++){ret += i;}return ret;}
};

这个方法遇到下面的例子会导致堆栈溢出。

别人的写法
等差数列求和那一步真的是神妙。

class Solution {public:int numSub(string s) {int mod = 1e9+7;int count = 0,ret = 0;for(int i = 0;i < s.size();++i){if(s[i] == '1'){count++;ret = (ret + count) % mod;//这个等差数列求和写的真好}else{count = 0;}}return ret;}
};

2022-1-15 Leetcode 1513.仅含1的子串数相关推荐

  1. Windows批处理命令快速获取文件夹下特定类型的文件名(2022.5.15)

    Windows批处理命令快速获取文件夹下特定类型的文件名 (2022.5.15) 1.需求分析 2.batch简介 3.代码实现 3.1 八种编程语言分别实现 3.1.1 C# 实现 3.1.2 C+ ...

  2. P1422 小玉家的电费--2022.03.15

    /* P1422 小玉家的电费--2022.03.15 https://www.luogu.com.cn/problem/P1422 */ #include <bits/stdc++.h> ...

  3. Xilinx HLS 导出IP失败的最新解决方案(2022.1.15)

    Xilinx HLS 导出IP失败的最新解决方案(2022.1.15) 作者主页: 从2022年1月1日起,所有版本的XIlinx HLS或者是Vitis HLS中的导出IP功能在使用时均会报错,同时 ...

  4. 日拱一卒——LeetCode 844.比较含退格的字符串

    大家好呀,今天为大家带来的LeetCode的题目是LeetCode 844.比较含退格的字符串.算是一道比较基础的题目. 题目 分析 这道题目相对简单,主要就是将时间复杂度和空间复杂度降低下来. 解法 ...

  5. vp视频结构化框架(2022/9/15更新)

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  6. Python线性回归:加载共享自行车租赁数据集 BikeSharing.csv。 1. 按以下要求处理数据集 (1)分离出仅含特征列的部分作为 X 和仅含目标列的部分作为 Y。

    加载共享自行车租赁数据集 BikeSharing.csv. 按以下要求处理数据集 (1)分离出仅含特征列的部分作为 X 和仅含目标列的部分作为 Y. (2)将数据集拆分成训练集和测试集(70%和 30 ...

  7. English Learning - L1-4 从此没有不会的表达(下) 2022.12.15 周四

    English Learning - L1-4 从此没有不会的表达(下) 2022.12.15 周四 5 动名词 5.1 动名词都有什么作用 作主语 做表语 做定语 动名词做定语有啥讲究? 做宾语 5 ...

  8. 最新苹果二手报价单(2022.2.15)

    2022.2.15换换回收iPhone苹果二手机报价单(按照内存.靓机.小花.大花.花机四个等级进行报价)如下所示

  9. BBC UK News(2022.04.15)

    BBC UK News(2022.04.15) 目录 Harry and Meghan visit Queen on way to Invictus Games Sunken Russian wars ...

最新文章

  1. 第24课 《前端之路,以不变应万变》
  2. 从实际案例聊聊Java应用的GC优化
  3. 划词翻译软件QTranslate 6.7.3 中文绿色版
  4. DBCP使用BasicdataSource连接(两种单例模式-----饿汉和懒汉模式)
  5. 【Unity】12.4 通过网格分层选择行进路线
  6. hbase/thrift/go连接失败
  7. 大众宣布成立欧洲公司 负责旗下电动汽车电池业务
  8. 羊车门问题python程序_用Python实现羊车门问题
  9. C语言学习笔记---字符串查找函数strstr()和strpbrk()函数
  10. ios 给网页传值_iOS开发—页面传值汇总
  11. 函数沿某一方向的变化率_多元函数知识点(1)
  12. API调用,API传参,面向对接开发,你真的会写接口文档吗?
  13. TOAD 调试存储过程的方法
  14. ppa什么网_ppa网站-和ppa网站相关的内容-阿里云开发者社区
  15. 10种人脉裂变技能,6个裂变核心,8个吸粉人性本能怎样玩粉丝裂变?
  16. 客户关系管理(CRM)是什么?
  17. 云大计算机应用技术考研2021,2021云南大学考研经验贴
  18. Elasticsearch的节点与分片
  19. 人生重开模拟器 的主逻辑:每一年先判断天赋再判断事件
  20. NormalBlend

热门文章

  1. Linux远程连接工具 SSH (OpenSSH)
  2. 新车电商百花争鸣时代:毛豆新车VS花生好车谁长谁短?
  3. Pxxx-本地套接字通信
  4. 认识Javascript中的Location对象(一)
  5. windows 安装 xhprof
  6. 荣耀盒子可以看电视直播
  7. ProGuard的作用、使用及bug分析
  8. 基于JavaScript实现前端数据多条件筛选功能
  9. 计算机视觉的自动编码器:无限可能的世界
  10. java swing医院信息管理系统 java swing mysql实现的医院信息管理系统源码(1019)