閱讀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校招內推編程題 等差數列