C解法

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

JS解法

枚举范围为 [1, 1000 - k + 1],确保序列长度不超出范围。
对每个起始整数 start,构造连续 k 个整数组成的字符串 seqStr。
比较字符频率:

检查 seqStr 和目标字符串 str 的字符是否完全一致。
使用字符频率统计(哈希表)进行比较,确保两者包含的字符种类和频率完全相同。
返回结果:

如果找到匹配的序列,返回其起始整数 start。
如果遍历结束仍未找到匹配,返回 -1。

// 主函数:查找最小的连续整数序列起点
function findMinSeq(str, k) {
    let result = -1; // 结果初始化为 -1,表示未找到匹配的序列

    // 枚举起始整数的范围
    for (let start = 1; start <= 1000 - k + 1; start++) {
        // 生成长度为 k 的连续整数序列的字符串
        const seqStr = Array.from({ length: k }, (_, i) => start + i).join('');

        // 判断字符组成是否与目标字符串相同
        if (isSameChars(seqStr, str)) {
            result = start; // 如果匹配,记录起始整数
            break; // 终止循环
        }
    }

    return result; // 返回找到的起始整数,或 -1
}

// 辅助函数:判断两个字符串的字符组成是否相同
function isSameChars(seqStr, shuffledStr) {
    // 长度不一致直接返回 false
    if (seqStr.length !== shuffledStr.length) return false;

    // 统计字符频率的工具函数
    const charCount = (s) =>
        [...s].reduce((acc, c) => (acc[c] = (acc[c] || 0) + 1, acc), {});

    // 分别统计 seqStr 和 shuffledStr 的字符频率
    const seqCount = charCount(seqStr);
    const shufCount = charCount(shuffledStr);

    // 比较两个字符频率是否完全相同
    return Object.keys(seqCount).every(
        (key) => seqCount[key] === shufCount[key]
    );
}

// 使用 readline 接收用户输入
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

// 处理用户输入
rl.on("line", (line) => {
    const [shuffledStr, k] = line.split(" "); // 分割输入
    console.log(findMinSeq(shuffledStr, Number(k))); // 调用主函数并输出结果
});

 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/145066058"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!