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

本文解析了网易2018内推笔试中的一道题目,该题目要求找出01串中最长的交错子串。交错01串定义为相邻字符不相同的01串,例如 '1' 和 '10101'。题目要求输入一个长度不超过50且仅包含0和1的字符串s,输出最长交错子串的长度。
摘要由CSDN通过智能技术生成

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)
}
程序可能写的不是很好,有错误的话希望指正哦。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值