C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
输入是一个仅包含 ‘0’ 和 ‘1’ 的字符串,称为信号。
查找字符串中最长的 “交替波” 子串。
交替波的定义:
必须以 ‘01’ 交替出现。
必须以 ‘0’ 结尾,例如:01010。
如果找不到满足条件的交替波,返回 “-1”。
实现逻辑:
遍历字符串,查找符合交替波条件的子串。
当遇到字符 ‘0’ 时,检查从该字符开始的可能交替波。
用一个指针 j 扫描每对 ‘01’,直到交替波终止(即下一个字符不是 ‘1’ 或子串结束)。
如果当前交替波以 ‘0’ 结尾且长度大于已记录的最大长度,更新结果。
重复此过程直到遍历完整个字符串。
输入输出:
输入:
一行字符串,仅包含字符 ‘0’ 和 ‘1’。
输出:
最长的交替波子串;如果没有找到符合条件的交替波,输出 “-1”。
时间复杂度:
O(n):字符串只需要遍历一次(使用双指针)。
空间复杂度:O(1),只使用常量额外空间。
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
console.log(findLongestWave(line));
});
function findLongestWave(signal) {
let maxLength = 0;
let result = "-1";
let i = 0;
while (i < signal.length) {
if (signal[i] === '0') {
let j = i;
while (j + 1 < signal.length && signal[j] === '0' && signal[j + 1] === '1') {
j += 2;
}
if (j < signal.length && signal[j] === '0') {
let currentWave = signal.slice(i, j + 1);
if (currentWave.length > maxLength) {
maxLength = currentWave.length;
result = currentWave;
}
}
i = j + 1;
} else {
i++;
}
}
return result;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: