华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
最长的完全交替连续方波信号。
输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,方波信号高位用1标识,低位用0标识。
说明:
输入信号字符串(长度 >= 3 且 <= 1024): 0010101010110000101000010
注:输入总是合法的,不用考虑异常情况
输出最长的完全连续交替方波信号串:01010 若不存在完全连续交替方波信号串,输出-1。
package com.guor.od;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入信号字符串
String signal = sc.nextLine();
// 定义正则表达式匹配完全连续交替方波信号
Pattern pattern = Pattern.compile("^(01)+0$");
// 最长完全连续交替方波信号的长度
int maxLength = 0;
// 最长完全连续交替方波信号的字符串
String result = "-1";
// 用于存储当前处理的信号
StringBuilder builder = new StringBuilder();
for (int i = 0; i < signal.length(); i++) {
char c = signal.charAt(i);
// 当前字符是0,且前一个字符也是0,说明一个完整信号结束
if (c == '0' && builder.length() > 0 && builder.charAt(builder.length() - 1) == '0') {
// 对当前信号进行匹配
Matcher matcher = pattern.matcher(builder.toString());
// 如果匹配到完全连续交替方波信号,并且长度大于之前的最大长度
if (matcher.find() && builder.length() > maxLength) {
// 更新最大长度
maxLength = builder.length();
// 更新最大长度对应的字符串
result = builder.toString();
}
// 清空当前信号
builder = new StringBuilder();
}
// 将当前字符加入当前信号
builder.append(c);
}
// 对最后一个信号进行匹配
Matcher matcher = pattern.matcher(builder.toString());
// 如果匹配到完全连续交替方波信号,并且长度大于之前的最大长度
if (matcher.find() && builder.length() > maxLength) {
// 更新最大长度对应的字符串
result = builder.toString();
}
// 输出最长的完全连续交替方波信号串
System.out.println(result);
}
}
00101010101100001010010
01010
下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。