首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
那当然啦
华为_终端_通用软件开发
发布于重庆
关注
已关注
取消关注
@runningcake_:
携程笔试0907
4题目游游有一个只包含'0'和'1'的字符串,他想知道这个字符串有多少个好子串?一个字符串如果是“好串”,那么该字符串的所有前缀,'0'的数量严格大于'1'的数量。输入描述输入一个只包含'0'和'1'的字符串,长度不超过100000。输出描述输出一个整数,代表答案。示例1输入100输出3分析熟练度不太行,想到一点思路没来得及写出来...首先看数据范围,n <= 1e5,所以暴力遍历每个区间必然会超时。我们使用的算法的时间复杂度需要是 O(nlogn) 或者 O(n)。由定义可以得到,如果一个子串是“好串”,那么依次从它的尾部删去一个字符,剩余的子串依然是“好串”。所以对于每个位置,如果以该位置为开头的最长“好串”长度为 length,那么以该位置为开头的“好串”就有 length 个。如果把字符串的 '0' 对应到 1,'1' 对应到 -1,那么 [i, j] 为好串的条件就等价于 i 处为 '0' 且前缀和数组 pre 对所有 i<=k<=j 满足 pre[k] >= pre[i]。寻找以 i (下标从1开始)为开头的最长“好串”,就等价于寻找 i 右侧第一个使得 [i,j] 不是“好串”的最小的 j。这等价于寻找 i 右侧使得 pre[j] < pre[i] 的最小的 j,问题转化为典型的单调栈问题。代码s = input()n = len(s)pre = [0] * (n + 1)str2num = {"0": 1, "1": -1}for i in range(1, n + 1): pre[i] = pre[i - 1] + str2num[s[i - 1]]stack = [(n + 1, int(1e9))] # (idx, pre[idx]) 初始化的时候加入最右侧的哨兵cnt = 0i = nj = n # 单调栈未处理过的前缀和数组的最右侧的位置while i > 0: # 对每个 i 找到 i 右侧第一个小于 pre[i] 的 pre[j] 和 j if s[i - 1] == "0": while j > i: while stack and stack[-1][1] >= pre[j]: stack.pop() stack.append((j, pre[j])) j -= 1 if stack[0][1] >= pre[i]: # 右侧最小值 cnt += n + 1 - i else: while stack[-1][1] >= pre[i]: stack.pop() cnt += stack[-1][0] - i i -= 1print(cnt)i 和 j 只会向左移动,前缀和数组的每项最多入栈一次、出栈一次,时间复杂度为 O(n)。
点赞 14
评论 4
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 18:35
湖南大学 C++
拼多多挂了😭
投递拼多多集团-PDD等公司10个岗位
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
07-30 11:29
打工人问一下休息时间有错吗
真的很糟糕:
都不当人了
点赞
评论
收藏
分享
06-04 10:32
安徽大学 单片机
简历被丢垃圾桶了😭求大佬拷打!
实习僧和BOSS直聘都投了几十家,硬件开发,硬件测试,嵌入式都投了,全是已读不回……我现在考虑想在秋招前速成一个Linux项目,其实现在完全不知道自己要找什么方向的,只能海投了,求大佬们给点意见😭😭😭
zzzzhz:
兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞
评论
收藏
分享
07-08 15:03
重庆工程学院 嵌入式工程师
刚毕业,就找不到工作了,呜呜呜呜~求内推~
考完研后,有没啥经验,现在根本不要应届生,太难了,
点赞
评论
收藏
分享
昨天 17:45
江南大学 Java
在点点互动实习我吃吃吃吃
在点点实习2个月,处于体重上升期,体重已上升10斤里面人说话又好听,我真的超喜欢呆里面的啦
投递点点互动等公司10个岗位
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
都是 dirty work,为什么别人的简历上就能言之有物🤔
2.1W
2
...
百度提前批,三面被推迟一周,喜提秋招第一凉
3733
3
...
虾皮后端一面(已挂)
3701
4
...
虾皮秋招一面
3701
5
...
干活最少的实习生因为长得漂亮转正了
3001
6
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
3001
7
...
7.30滴滴提前批一面凉经
2909
8
...
百度提前批 三面
2835
9
...
QQ提前批一面凉经
2522
10
...
7.30百度提前批一面
2281
创作者周榜
更多
正在热议
更多
#
你遇到最难的面试题目是_
#
15018次浏览
193人参与
#
反问环节如何提问
#
95487次浏览
1951人参与
#
中兴秋招
#
203586次浏览
2280人参与
#
简历上的经历如何包装
#
24185次浏览
725人参与
#
如何看待offer收割机的行为
#
815364次浏览
6087人参与
#
你最讨厌面试问你什么?
#
24935次浏览
282人参与
#
秋招最大的收获是什么?
#
38608次浏览
323人参与
#
我的实习收获
#
90868次浏览
1038人参与
#
26届的你,投了哪些公司?
#
36850次浏览
428人参与
#
滴滴求职进展汇总
#
233317次浏览
2116人参与
#
作业帮求职进展汇总
#
56998次浏览
376人参与
#
初创公司值得加入吗?
#
27303次浏览
194人参与
#
我对___祛魅了
#
43292次浏览
410人参与
#
数字马力求职进展汇总
#
184446次浏览
1500人参与
#
你跟室友的关系怎么样?
#
6009次浏览
94人参与
#
什么样的背景能拿SSP?
#
31264次浏览
199人参与
#
工作中哪个瞬间让你想离职
#
60569次浏览
545人参与
#
和同事相处最忌讳的是__
#
21083次浏览
216人参与
#
去年你投递实习了吗?
#
22847次浏览
331人参与
#
如何快速融入团队?
#
14824次浏览
182人参与
#
机械人的金三校招总结
#
36198次浏览
461人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务