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