一个01字符串,求出现0、1出现次数相等的最长子串
来源:互联网 发布:如何看待网络暴力演讲 编辑:程序博客网 时间:2024/06/09 20:54
题目描述:
已知一个长度为N的字符串,只由0和1组成, 求一个最长的子串,要求该子串出0和1出现的次数相等。
要求算法时间复杂度尽可能的低。
比如: 1000010111000001,加粗的部分10
思路:
(1) 最简单的想法就是遍历所有的子串,之后判断该子串是否满足条件
N^2子串,每个子串扫一遍判断0、1是否出现的次数相等,复杂度为O(N^3)
稍加思考就会发现, 如果一个长度为n的子串满足条件,加么这n个元素的和 加起来一定=(n/2)
这样在循环的过程中,增量加就可以了,不需要每个子串从头计算,复杂度降为O(N^2);
int maxlen = 0, sum = 0, currlen = 0;
for(int i = 0; i < N; ++i)
{
sum = 0;
for(int j = i; j < N; ++j)
{
currlen = j - i + 1;
sum += int(A[j]);
if(currlen%2 == 0 && sum == currlen/2 && currlen > maxlen)
maxlen = currlen;
}
for(int i = 0; i < N; ++i)
{
sum = 0;
for(int j = i; j < N; ++j)
{
currlen = j - i + 1;
sum += int(A[j]);
if(currlen%2 == 0 && sum == currlen/2 && currlen > maxlen)
maxlen = currlen;
}
(2) 还有没有办法进一步降低算法的复杂度呢?
遇到0:-1 遇到1:+1 sum:-n~n 提升N, 0~2n
个数相等,则前缀和为0。对前缀和进行排序,最大减去最小
哈希代替排序,
0 0
- 一个01字符串,求出现0、1出现次数相等的最长子串
- 一个01字符串,求出现0、1出现次数相等的最长子串
- 一个01字符串,求出现0、1出现次数相等的最长子串
- 求一个字符串连续出现次数最多的子串
- 求一个字符串中出现次数最多的子串
- 求字符串中出现次数最多且最长的子串、连续出现次数最多的子串
- 求一个字符串中出现另一子字符串的次数
- 求一个字符串中连续出现并且出现次数最多的子串.
- 字符串---求一个字符串中连续出现次数最多的子串
- 求字符串里出现最多的子串及次数
- 求字符串中连续出现次数最多的子串
- 求字符串中连续出现次数最多的子串
- 求一个字符串中出现次数最多的子串(并不是连续的)
- 编程珠玑(四)求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串[C语言实现]
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- <PY><NumPy><SciPy>图像翻转切割遮罩
- cf534D 枚举握手次数
- Ajax提交请求后台获取不到session中的值
- PreTranslateMessage作用和使用方法
- ACM在线练习-括号配对问题
- 一个01字符串,求出现0、1出现次数相等的最长子串
- 关于获取操作系统版本的方法
- 《大话设计模式》--雷锋依然在人间--工厂方法模式<Factory Method>(8)
- hdu5246超级赛亚ACMer
- 如何获取连接的wifi密码
- 屏蔽runtime error等错误的弹出框
- openTSDB ConnectionManager: Unexpected exception from downstream java.io.IOException: Broken pipe
- Android Log系统详解
- ios AFNetworking 实用篇