更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记
该专栏题目包含两部分:
100 分值部分题目
200 分值部分题目
所有题目都会陆续更新,订阅防丢失
题目描述
输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,方波信号高位用1 标识,低位用0标识,如图:
说明:
1.一个完整的信号一定以0开始然后以0结尾,即 010 是一个完整信号,但101,1010,0101不是
2.输入的一串方波信号是由一个或多个完整信号组成
3.两个相邻信号之间可能有 0个或多个低位,如 0110010,011000010
4.同一个信号中可以有连续的高位,如 01110101011110001010,前 14 位是一个具有连续高位的信号5.完全连续交替方波是指 10 交替,如 01010 是完全连续交替方波,0110 不是
输入描述
输入信号字符串(长度>3日≤1024):
0010101010110000101000010
输出描述
输出最长的完全连续交替方波信号串:
01010
若不存在完全连续交替方波信号串,输出-1.
示例
输入
00101010101100001010010
输出
01010
说明
输入信号串中有三个信号:0 010101010110(第一个信号段)00 01010(第二个信号段)010(第三个信号段)第一个信号虽然有交替的方波信号段,,但出现了11部分的连续高位,不算完全连续交替方波,在剩下的连续方波信号串中01010最长
题解
- 用 00 拆分字符串
- 用 “” 替换 11,替换后无变化的即为 符合要求的字符串
- 输出最长的一个
源码Java
public class Signal {
static Input input ;
static {
input = new Input("0010101010110000101000010");
}
public static void main(String[] args) {
String[] signals = input.nextLine().split("00");
int max = Integer.MIN_VALUE;
String result = "";
for (int i = 0; i < signals.length; i++) {
String signal = signals[i];
if (signal.length() > 0 && signal.equals(signal.replace("11", ""))) {
int length = signal.lastIndexOf('1') - signal.indexOf('1');
if (length > max) {
result = signal;
max = length;
}
}
}
String substring = result.substring(result.indexOf('1'), result.lastIndexOf('1') + 1);
System.out.println("0" + result + "0");
}
}