阅读1002 返回首页    go 阿里云 go 技术社区[云栖]


网易2018校招内推编程题 交错01串

问题:
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。 
输入描述:
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'


输出描述:
输出一个整数,表示最长的满足要求的子串长度。

输入例子1:
111101111

输出例子1:
3


b9bd28a3c6caeebdb90c9933629438ba47e712eb


public class Staggered01String {

	public static void main(String[] args) {
//		读取输入01串
		Scanner scanner = new Scanner(System.in);
		String str= scanner.nextLine();
		
//		将01串化成char数组
		char[] c = str.toCharArray();
		
//		如果01串长度为1,直接输出1并结束即可。
		if(c.length==1){
			System.out.println(1);
			return;
		}			
		
//		list用来装分割点之差,即每个子串的长度。
		List<Integer> list = new ArrayList<Integer>();
		
//		local代表当前分割点的位置。一开始是0;
		int local=0;
		
//		让i从1开始,去c[i]和前面的字符比较(c[i-1]),如相同,则说明当前i是分割点,将当前i与local做差,即是i分割点前面子串的长度。
//		再将i赋给local 标记成新的分割点。如果i已经是最后一个,还需要将i+1设置成分割点,与当前local做差。
		for (int i = 1; i < c.length; i++) {
			if(c[i]==c[i-1]){
				list.add(i-local);
				local=i;
			}
			if (i==c.length-1)
				list.add(i+1-local);
		}
		
//		取最大值
		int max =list.get(0);
		for (int i = 1; i < list.size(); i++) {
			if(list.get(i)>max){
				max=list.get(i);
			}
		}
		
		System.out.println(max);
	}

}



最后更新:2017-09-02 16:02:52

  上一篇:go  负载均衡SLB高可用的四个层次
  下一篇:go  网易2018校招内推编程题 等差数列