JS刷题!双指针3-字符串最短循环子串

121 阅读2分钟

1. 题目来源

稀土掘金-双指针No.130-字符串最短循环子串(简单)-MarsCode

2. 解题思路

题目要求:我们需要找到一个最短的子串,使得该子串重复拼接可以得到输入的字符串。如果找不到这样的子串,则返回空字符串。

  1. 遍历子串长度:从1到字符串的一半,因为一个子串至少要需要重复两次才能构成字符串
  2. 提取子串:使用substring方法提取当前长度的子串
  3. 构建重复字符串:将循环子串拼接起来,直到长度不小于原先的字符串
  4. 比较字符串:检查构建的字符串是否与原字符串相同,如果相同就返回子串

3. 题解

function solution(inp) {    // 遍历所有可能的子串长度,子串长度最大不会超过输入字符串长度的一半
    for (let len = 1; len <= inp.length / 2; len++) {
        // 提取从输入字符串起始位置开始,长度为 len 的子串
        let subStr = inp.substring(0, len);
        
        // 构建由该子串重复拼接而成的字符串
        let repeatedStr = '';
        while (repeatedStr.length < inp.length) {
            repeatedStr += subStr;
        }
        
        // 检查构建的字符串是否与原字符串相同,如果相同则该子串为满足条件的最短子串
        if (repeatedStr === inp) {
            return subStr; 
        }
    }
    return ''; // 没有找到合适的子串,返回空字符串
}

function main() {
    // 测试 solution 函数,使用不同的输入字符串,并使用 === 运算符比较函数的返回值是否与预期结果相等
    console.log(solution("abcabcabcabc") === "abc");
    console.log(solution("aaa") === "a");
    console.log(solution("abababab") === "ab");
    console.log(solution("ab") === "");
    console.log(solution("abcdabcdabcdabcd") === "abcd");
    console.log(solution("b") === "");
}

main();

4. 关于豆包MarsCode

4.1 推荐使用!

豆包MarsCode简单方便,上手快,能应对日常的编程任务,刷题时也能给你提供不错的解题思路和示例代码,很适合新手和老手,大大提高了工作效率;所以个人挺推荐使用豆包MarsCode去辅助开发!

4.2 HowieCong与MarsCode的经历

  1. 线上参加过两次的字节跳动 X 豆包MarsCode的青训营,积极参与其中,搭配着MarsCode去刷算法题和项目开发真能学到很多
  2. 线下在参加Pycon China 2024上海站时看到了MarsCode参展,MarsCode团队成员非常热情的,拿到了MarsCode的一些周边

❓其他

1. 疑问与作者HowieCong声明

  • 如有疑问、出错的知识,请及时点击下方链接添加作者HowieCong的其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong

  • 若想让作者更新哪些方面的技术文章或补充更多知识在这篇文章,请及时点击下方链接添加里面其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong

  • 声明:作者HowieCong目前只是一个前端开发小菜鸟,写文章的初衷只是全面提高自身能力和见识;如果对此篇文章喜欢或能帮助到你,麻烦给作者HowieCong点个关注/给这篇文章点个赞/收藏这篇文章/在评论区留下你的想法吧,欢迎大家来交流!

2. 作者社交媒体/邮箱-HowieCong