华为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;
    }
}
相关推荐
阿正的梦工坊20 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
chools20 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
知行合一。。。21 小时前
Python--05--面向对象(属性,方法)
android·开发语言·python
李白你好21 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
青梅橘子皮21 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
浅时光_c21 小时前
3 shell脚本编程
linux·开发语言·bash
Evand J1 天前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
U盘失踪了1 天前
Java 的 JAR 是什么?
java·jar
今天又在写代码1 天前
java-v2
java·开发语言
competes1 天前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql