首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
沐锦
门头沟学院 Java
发布于江苏
关注
已关注
取消关注
@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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-08 22:06
门头沟学院 嵌入式软件工程师
韶音嵌入式三面
韶音三面距离二面隔了一个月 1. 这个专业主要是学什么 2. 研究生课题 3. 对你来说遇到最困难的是什么 4. 如果让你重新再做一次你会怎么做 5. 在项目中学到了什么 6. 如果让你再接一次任务你会怎么做,这么多指标怎么考虑 7. C++面向对象的理念 8. 讲一下epoll 9. 职业规划 10. 地域的选择 11. 有什么offer 12. 对韶音的了解 13. 平时运动
查看13道真题和解析
点赞
评论
收藏
分享
10-08 14:50
海康威视_技术支持部_云存储开发工程师(准入职员工)
海康威视内推,海康威视内推码
笔试真实工作体验!也想分享一下自己对海康的感受,也在海康总部的3期。 之前看了网上的评论实属是有点吓人的,但是百闻不如一见自己终究是亲自感受了一下。 这可能是我国内外大大小小加起来的第6段实习或者工作。 海康首先给我的感觉是人真的好多,尤其食堂的人,我可能上学都没有见过这么多人,还有电梯,我每次坐是一头雾水。当然这些对于我来说都不是很重要。 可能很多人最关心的就是海康的工作强度和时间是不是真如网上说的那么严重,而通过这段时间的感受,我觉得海康可能是我节奏最慢的一次体验,完成了任务就可以开开心心的回家了,根本不需要无效加班,如果自己想学点产品类的知识还是可以在公司里多学一点的。 关于部门小组氛围...
海康威视公司福利 1024人发布
点赞
评论
收藏
分享
08-17 17:22
深圳职业技术学院 嵌入式硬件工程师
花了50改的简历,值吗
Clavoss:
一眼AI,死亏
点赞
评论
收藏
分享
昨天 14:46
门头沟学院 Java
双非Java大家期望薪资多少
看惯了牛客上的大佬们,不知道自己的定位到底在哪了,hot100 50-60道选手,一段很一般的实习,感觉自己技术很一般,秋招投了200多家,大厂没想过投,现在手里有两份offer在犹豫,深圳某制造业1w月薪,长沙国企5-6k,想问问这个薪资大家会签吗,问问大家的意见,双非真的太难了
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
HR面,到底该准备些啥(附核心问题回答思路)
1.8W
2
...
除了卷大厂,还有其他出路吗。。。
4559
3
...
懂车帝二面 2025.10.11 1h32min
4291
4
...
双非秋招timeline供参考(腾讯字节阿里快手美团)
3316
5
...
小红书一面面经
2947
6
...
牛牛求救🆘,不敢梭哈后端第二技能点怎么搭配
2891
7
...
10.12pdd笔试大鸭蛋
2575
8
...
第一次去北京那么远的地方实习,心里总是不安,大家会有这种感觉吗?
2388
9
...
10.12 拼多多技术岗笔试 第二题 求教
2388
10
...
华为10月10号考的手写LSTM被压中了
1971
创作者周榜
更多
正在热议
更多
#
面包vs爱情,怎么选?
#
7679次浏览
89人参与
#
职场新人体验
#
83851次浏览
595人参与
#
深信服秋招来了
#
279687次浏览
2915人参与
#
实习生如何通过转正
#
104195次浏览
1394人参与
#
tplink提前批进度交流
#
207040次浏览
1506人参与
#
安克创新求职进展汇总
#
53890次浏览
528人参与
#
爱玛科技集团求职进展汇总
#
27129次浏览
195人参与
#
Tplink求职进展汇总
#
180363次浏览
912人参与
#
秋招结束之后的日子
#
86216次浏览
976人参与
#
面试被问“你的缺点是什么?”怎么答
#
154670次浏览
2146人参与
#
贝壳求职进展汇总
#
34538次浏览
184人参与
#
硬件/芯片公司岗位评价
#
8321次浏览
28人参与
#
Offer比较,你最看重什么?
#
215213次浏览
1389人参与
#
互联网公司爆料
#
144663次浏览
708人参与
#
招银网络求职进展汇总
#
168340次浏览
992人参与
#
联影求职进展汇总
#
43040次浏览
284人参与
#
华为海思工作体验
#
29058次浏览
120人参与
#
新凯来求职进展汇总
#
49729次浏览
126人参与
#
材料进Fab厂真的劝退吗?
#
56098次浏览
204人参与
#
五一之后,实习真的很难找吗?
#
88024次浏览
556人参与
#
应届生,你找到工作了吗
#
69005次浏览
459人参与
#
总结:哪家公司最喜欢泡池子
#
144044次浏览
520人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务