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),只使用常量额外空间。

// 引入 Node.js 的 readline 模块用于处理输入输出
const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

// 读取输入行并调用核心函数
rl.on("line", (line) => {
    console.log(findLongestWave(line)); // 调用函数并输出结果
});

/**
 * 查找最长的交替波子串
 * @param {string} signal 输入信号字符串
 * @returns {string} 最长的交替波子串,如果不存在返回 "-1"
 */
function findLongestWave(signal) {
    let maxLength = 0; // 记录最长交替波的长度
    let result = "-1"; // 存储最终结果,默认为 "-1"

    let i = 0; // 指针 i,用于遍历字符串
    while (i < signal.length) {
        // 检查是否从当前字符开始形成交替波
        if (signal[i] === '0') {
            let j = i; // 指针 j,用于检测交替波的结束
            // 检查每对 '01' 是否符合交替波规则
            while (j + 1 < signal.length && signal[j] === '0' && signal[j + 1] === '1') {
                j += 2; // 每次跳过 '01' 两个字符
            }
            // 如果交替波以 '0' 结束,则形成一个有效波
            if (j < signal.length && signal[j] === '0') {
                // 提取当前交替波子串
                let currentWave = signal.slice(i, j + 1);
                // 如果当前波的长度超过已记录的最大长度,更新结果
                if (currentWave.length > maxLength) {
                    maxLength = currentWave.length; // 更新最大长度
                    result = currentWave; // 更新最长波子串
                }
            }
            // 移动 i 到交替波结束的下一个位置
            i = j + 1;
        } else {
            // 如果当前字符不是 '0',直接跳到下一个字符
            i++;
        }
    }

    // 返回最长的交替波子串,如果不存在,返回默认值 "-1"
    return result;
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145064858"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!