网易校招第3题
2017-08-27 12:24
162 查看
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。
输入描述:
输出描述:
输入例子1:
输出例子1:
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。
输入描述:
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'
输出描述:
输出一个整数,表示最长的满足要求的子串长度。
输入例子1:
111101111
输出例子1:
3
思路:就是从0开始逐个比较,我是首先判断str[k]和str[k+1]的绝对值先得是1,然后进行比较:k,k+2,k+4,...以及k+1,k+3,k+5,...,进行比较,分别记录比较停止的位置,分别记为n1,n2,那么最长的长度就是:min(n1,n2)-k+1+1;这里第1个“1”,应该能理解,因为加上k本身,第二个“1”是这样的:比如一个在4停止的,一个在5停止的,那么其实4和5这两个位置都应该算在内的,所以还需要+1。
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int main() { string str; cin>>str; int f=1; for(int i=0;i+1<str.length()&&f;i++) { if(str[i]!=str[i+1]) { f=0; } } if(str.length()==1) { cout<<1; } else if(f) { cout<<1; } else { int n1,n2,Max=0; for(int k=0;k<str.length();k++) { if(abs(str[k]-str[k+1])==1) { int flag1=1,flag2=1; for(int i=k;i<str.length()&&flag1;i+=2) { if(str[i]!=str[i+2]) { flag1=0; n1=i; } else { n1=i+2; } } for(int i=k+1;i<str.length()&&flag2;i+=2) { if(str[i]!=str[i+2]) { flag2=0; n2=i; } else { n2=i+2; } } Max=max(min(n1,n2)-k+2,Max); } } cout<<Max; } return 0; }
相关文章推荐
- “顶嵌杯”--初赛第3题分析
- 九度oj 第3题 跳台阶 ----何海涛:《剑指Offer:名企面试官精讲典型编程题》
- 39页第3题 求x的n次幂
- OCP-1Z0-051 第3题 转义字符
- 第3题作业
- 第3题
- 微软100题第3题:求子数组的最大和
- 无重复数字的三位数(第0届第3题)
- CSP考试 2015年09月第3题 C语言实现
- 2017网易校招内推笔试题
- 华为校招2016.09机试 第3题: 装满篮子
- 网易校招2017笔试题-求最大奇约数和
- MOOC清华《程序设计基础》第4章第3题:不相同的个数(用筛法做)
- 2018网易校招编程题(8)小易喜欢的数列
- 2018网易校招移动安全工程师笔试题
- CCF CSP 2015年12月第3题 画图 (模拟+DFS或BFS)
- 第八届蓝桥杯省赛JavaB组第3题
- 2018 蓝桥杯 省赛 B组 原题 C语言B组 第3题 第九届蓝桥杯真题 +答案+解析
- “顶嵌杯”----初赛第3题分析
- hdu 4334 Trouble(2012多校联赛4,第3题)