华为OD上机考试真题(Java)——最长方连续方波信号

题目描述

输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,方波信号高位用1标识,低位用0标识,如图:

说明:

  1. 一个完整的信号一定以0开始然后以0结尾,即010是一个完整信号,但101,1010,0101不是
  2. 输入的一串方波信号是由一个或多个完整信号组成
  3. 两个相邻信号之间可能有0个或多个低位,如0110010,011000010
  4. 同一个信号中可以有连续的高位,如01110101011110001010,前14位是一个具有连续高位的信号
  5. 完全连续交替方波是指10交替,如01010是完全连续交替方波,0110不是

输入描述:

shell 复制代码
输入信号字符串(长度 >= 3 且 <= 1024)
注:输入总是合法的,不用考虑异常情况

输出描述:

shell 复制代码
输出最长的完全连续交替方波信号串
若不存在完全连续交替方波信号串,输出 -1

示例一:

输入

shell 复制代码
0010101010110000101000010

输出

shell 复制代码
01010

先看结果:

通过以下步骤来实现:

  1. 定义完全连续交替方波 :一个完整的信号一定以 0 开始然后以 0 结尾,并且中间部分必须是 10 交替。
  2. 遍历输入字符串:通过遍历字符串来识别和提取符合上述定义的信号。
  3. 记录最长信号:在遍历过程中记录最长的完全连续交替方波信号。

下面是一个具体的Java代码实现:

java 复制代码
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String single = in.nextLine();
        System.out.println(findResult(single));
    }

    private static String findResult(String single) {
        // 正则表达式模式,匹配完全连续交替的方波信号
        Pattern pattern = Pattern.compile("^(01)+0$");
        int maxLength = 0;
        String longestWare = "-1";
        StringBuilder currentWare = new StringBuilder();
        for (char c : single.toCharArray()) {
            if (c == '0') {
                if (currentWare.length() > 0 && currentWare.charAt(currentWare.length() - 1) == '0') {
                    if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
                        maxLength = currentWare.length();
                        longestWare = currentWare.toString();
                    }
                    //  currentWare = new StringBuilder();
                    //  currentWare.setLength(0);  这三行都是把StringBuilder置为空
                    currentWare.delete(0, currentWare.length());
                }
            }
            currentWare.append(c);
        }
        // 检查最后一个波形
        if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
            longestWare = currentWare.toString();
        }
        return longestWare;
    }
}
java 复制代码
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String single = in.nextLine();
        System.out.println(findResult(single));
        System.out.println(findResult2(single));
    }

    private static String findResult(String single) {
        char[] singles = single.toCharArray();
        StringBuilder sb = new StringBuilder();
        int maxLength = 0;
        String result = "-1";
        // ^:表示匹配字符串的开头。(01)+:表示匹配一个或多个连续的01子串。0$:表示匹配以0结尾的字符串。
        Pattern pattern = Pattern.compile("^(01)+0$");
        for (int i = 0; i < singles.length; i++) {
            if (singles[i] == '0') {
                // 说明出现标志位00,之前加入的sb的字符串可以构成一个信号串
                if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '0') {
                    if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
                        result = sb.toString();
                        maxLength = sb.length();
                    }
                    sb.setLength(0);
                }
            }
            sb.append(singles[i]);
        }
        // 尾部的波形结尾是10,不存在下一个0来让他进入上述的匹配判断里,所以得在这里判断一次。
        if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
            result = sb.toString();
            maxLength = sb.length();
        }
        return result;
    }
}
相关推荐
Chase_Mos2 小时前
Spring 必会之微服务篇(1)
java·spring·微服务
码上淘金2 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo2 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
格林威4 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
小林学习编程4 小时前
SpringBoot校园失物招领信息平台
java·spring boot·后端
撸码到无法自拔4 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
橙子199110164 小时前
在 Kotlin 中什么是委托属性,简要说说其使用场景和原理
android·开发语言·kotlin
androidwork4 小时前
Kotlin Android LeakCanary内存泄漏检测实战
android·开发语言·kotlin
heart000_15 小时前
IDEA 插件推荐:提升编程效率
java·ide·intellij-idea
学地理的小胖砸5 小时前
【Python 基础语法】
开发语言·python