首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-11 16:00
腾讯_HR(准入职员工)
腾讯云智研发内推-腾讯云智研发内推
真实体验是有超好的导师制定成长计划,全程辅导,各种腾讯内部学习网站和资料,上下班班车接送,然后基本一月团建一次。工作压力中等,百分之70情况能6点多下班,其他情况一般在8点左右。早投递,早筛选,早拿offer.!!!敲重点 用我的内推码投递后一定要评论区留言mark一下,以后好找我查进度,我秋招就是随便填别人的内推码,后来查进度都不知道找谁。惨痛的经历。#腾讯集团旗下|云智研发公司25届春招补录&26届暑期实习开始!【公司简介】云智研发公司是腾讯旗下的子公司,公司坚持投资区域书,布局研发人才,聚集云和智慧产业基础产品和行业标准产昂的研发。推进云与产业互联网战略落地,助力产业数字化转型升...
腾讯音乐娱乐集团公司福利 78人发布
点赞
评论
收藏
分享
04-14 14:12
第一拖拉机制造厂拖拉机学院 Java
暑期实习大失败,心态爆炸
暑期面试盘点:腾讯一面挂、二面挂字节laas一面挂、广告业务一面挂蚂蚁简历面挂猿辅导一面挂美团一面挂京东一面挂心态超级无敌大爆炸,仅有一个坚持到二面。会有属于我的offer吗?
开心的菜鸡在评审:
兄弟我和你说我好几次三面挂了会让你心情好一点嘛
点赞
评论
收藏
分享
03-08 21:25
沙洲职业工学院 运营
遇到霸王合同老实了
learYuan:
🐕看了都摇头
点赞
评论
收藏
分享
04-10 12:23
门头沟学院 前端工程师
4.10淘天前端暑期一面面经
4.8晚上做的笔试,只a了一道,没想到给我发面试通知了,本着学习的目的赶紧约了面试。一面八股文 + 场景题把我拷打的很厉害,面完人都是晕的,但是面试官很好,能够给你不错的引导,有的问题稍微引导下也能想出来。面试题目:自我介绍。ES6的新特性有什么?简单讲一讲讲一讲箭头函数,它和普通函数比起来有什么特点?刚才提到了map,map和object有什么区别(提示key)简单说说promise。除了then方法,promise对象还有什么别的方法?手动实现promise.all,并且返回所有的结果,而不是原有方法的返回值。讲讲对于async和await的理解。CSS如何实现垂直居中?如何解决CSS类名...
查看17道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
面试感想:聊透业务拿 Offer
1.7W
2
...
是的,我就是一个眼高手低的废物
6104
3
...
推荐一个0门槛上车AI的机会!!!
6058
4
...
25届秋招复盘:我为什么选择携程?
6012
华为实习进展
热聊中
5
...
从实习生到参与核心项目:记录我在Keep的2年
4260
6
...
理想Java实习一面
4150
7
...
高德Java一面分享
3318
8
...
华为实习笔试只a了第一道是不是寄了
3044
9
...
腾讯云智三面暖经90min
3019
10
...
拼多多timeline
2892
创作者周榜
更多
正在热议
更多
#
实习进度记录
#
79273次浏览
699人参与
#
地方国企笔面经互助
#
20309次浏览
35人参与
#
Keep实习校招
#
27533次浏览
190人参与
#
春招进度记录
#
68412次浏览
518人参与
#
总结:哪家公司面试体验感最差
#
37552次浏览
188人参与
#
你知道哪些职场黑话?
#
27850次浏览
228人参与
#
软开人,说说你的烦心事
#
39223次浏览
259人参与
#
风评不好的公司,你会去吗?
#
32681次浏览
164人参与
#
市场营销面经
#
36561次浏览
293人参与
#
市场营销人求职交流聚集地
#
103749次浏览
988人参与
#
国企vs私企,怎么选?
#
19179次浏览
162人参与
#
毕业后不工作的日子里我在做什么
#
157405次浏览
1376人参与
#
降低公积金和取消房补怎么选
#
13584次浏览
64人参与
#
应届生初入职场,求建议
#
174754次浏览
2433人参与
#
Offer比较,你最看重什么?
#
143553次浏览
899人参与
#
你想吐槽公司的哪些规定
#
13291次浏览
43人参与
#
招银网络求职进展汇总
#
99757次浏览
635人参与
#
第一份工作应该选高薪还是热爱?
#
44062次浏览
421人参与
#
不考虑转正,实习多久合适
#
20552次浏览
104人参与
#
诺瓦星云求职进展汇总
#
190546次浏览
1632人参与
#
找工作时遇到的神仙HR
#
710273次浏览
4559人参与
牛客网
牛客企业服务