华为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;
    }
}
相关推荐
xxxiugou1231 分钟前
C++命名空间与引用全解析
开发语言·c++
十碗饭吃不饱5 分钟前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
T_Wizard11 分钟前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI25 分钟前
JEV的用法
java·前端·数据库
灿飞38 分钟前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin
知识搬运临时工1 小时前
JVM 删掉偏向锁之后,一次无竞争锁从 0.3 纳秒变成 5.4 纳秒
java
IT枫斗者枫哥1 小时前
用了BigDecimal还差一分?用四组Java代码查清原因
java·后端
一条泥憨鱼1 小时前
【消息队列】ACK确认了什么:消息队列可靠投递的完整链路
java·后端·kafka·消息队列·rabbitmq
yangmu32032 小时前
编程语言发展简史:从机器指令到智能协作
开发语言
从琳开始9892 小时前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php