网易2018内推笔试题解析(交错01串)

来源:互联网 发布:insert多条数据,错误 编辑:程序博客网 时间:2024/05/28 11:30

12号做了网易的笔试题,像记录分享一下

题目:

如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。

输入描述:

输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'。

输出描述:

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

我用了两种方法实现,java和js,可能思路差不多。

一、java实现

import java.util.Scanner;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class Main {    public static void main(String[] args) {       Scanner scanner=new Scanner(System.in);String string=scanner.next();char str[]=string.toCharArray();System.out.println(MaxNum(str));    }        public static Object MaxNum(char cha[]){int MaxNum=1;int Maxnumb=1;int com[];List items=new ArrayList();items.add(1);for (int i = 1; i < cha.length; i++) {if(cha[i]==cha[i-1]){MaxNum=1;if(Maxnumb!=1){items.add(Maxnumb);}Maxnumb=1;}else{Maxnumb=Maxnumb+1;}}        items.add(Maxnumb);Collections.sort(items);  int a=items.size();return items.get(a-1); }}


二、js实现
基本思路:
将输入的字符串传入数组,然后设置一个变量MaxLength,默认长度为1(因为在这个题中,单独的'0'和'1'都算一个01串),然后遍历数组,判断i和i-1,如果相等,则排除,则将循环中的MaxLength添加到数组里面,然后重置为1。在第一个for循环结束后,最后还需要将MaxLength放入数组,然后对数组进行循环,取出最大值,返回即可。
while(line=readline()){//牛客网默认的代码模式        var str=[];//定义两个数组,一个用来存输入的字符串,一个用来存遍历的长度var cha=[];str=line;var MaxLength=1;for(var i=1;i<str.length;i++){if(str[i]==str[i-1]){if(MaxLength!=1){cha.push(MaxLength);MaxLength=1;}}else if(str[i]!=str[i-1]){MaxLength=MaxLength+1;}}cha.push(MaxLength);var num=cha[0];for(var i = 1, length1 = cha.length; i < length1; i++){if(num<cha[i]){num=cha[i];}}    print(num)}
程序可能写的不是很好,有错误的话希望指正哦。