华为机考题:非严格递增连续数字序列

输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列的长度(比如12234属于非严格递增连续数字序列)。

输入描述:

输入一个字符串仅包含大小写字母和数字,输入的字符串最大不超过255个字符。

输出描述:

最长的非严格递增连续数字序列的长度

示例1:

输入

abc2234019A334bc

输出

4

说明

2234为最长的非严格递增连续数字序列,所以长度为4。

public class ZT15 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String input = sc.nextLine();

        char[] chars = input.toCharArray();

        int start = 0;

        int end = 0;

        int max = 0;

        char tem = ' ';

        for (int i = 0; i < chars.length; i++) {

            char ch = chars[i];

            if (ch>= '0' && ch<='9'){

                if (start == 0){

                    start = i;

                    end = i;

                    tem = ch;

                    continue;

                }

                if (ch == tem + 1 || ch == tem){

                    tem = ch;

                    end++;

                }else {

                    max = Math.max(max,end - start+1);

                    start = 0;

                    end = 0;

                    tem = ' ';

                }

            }else {

                max = Math.max(max,end - start+1);

                start = 0;

                end = 0;

                tem = ' ';

            }

        }

        System.out.println(max);

    }

}

016 【分班】

幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。

小朋友的编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。

输入描述:

输入为空格分开的小朋友编号和是否同班标志。

比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。

其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。

不考虑输入格式错误问题。

输出描述:

输出为两行,每一行记录一个班小朋友的编号,编号用空格分开。且:

1、编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行。

2、若只有一个班的小朋友,第二行为空行。

3、若输入不符合要求,则直接输出字符串ERROR。

示例1:

输入

1/N 2/Y 3/N 4/Y

输出

1 2

3 4

说明

2的同班标记为Y,因此和1同班。

3的同班标记为N,因此和1、2不同班。

4的同班标记为Y,因此和3同班。

所以1、2同班,3、4同班,输出为

1 2

3 4

public class ZT16 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String[] input = sc.nextLine().split(" ");

        List<Integer> list1 = new ArrayList<>();

        List<Integer> list2 = new ArrayList<>();

        //0号是1班 剩下是2班

        int preCla = 1;

        for (int i = 0; i < input.length; i++) {

            String[] num = input[i].split("/");

            if (i == 0){

                list1.add(Integer.parseInt(num[0]));

                preCla = 1;

                continue;

            }

            if (preCla == 1){

                if (num[1].equals("Y")){

                    list1.add(Integer.parseInt(num[0]));

                }else {

                    list2.add(Integer.parseInt(num[0]));

                    preCla = 2;

                }

            }else {//N

                if (num[1].equals("Y")){

                    list2.add(Integer.parseInt(num[0]));

                }else {

                    list1.add(Integer.parseInt(num[0]));

                    preCla = 1;

                }

            }

        }

        Collections.sort(list1);

        Collections.sort(list2);

        for (int i = 0; i < list1.size(); i++) {

            System.out.print(list1.get(i) + " ");

        }

        System.out.println();

        for (int i = 0; i < list2.size(); i++) {

            System.out.print(list2.get(i) + " ");

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员杨弋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值