You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现字符串旋转判断函数?解决代码边缘case处理难题

解决字符串旋转判断的问题

嘿,我来帮你搞定这个字符串旋转判断的问题!其实判断一个字符串是不是另一个的旋转版本,有个经典又高效的思路,而且能很好地处理边缘情况,咱们一步步来聊。

核心思路

如果字符串 s2 是 s1 的旋转版本,那把 s1 和自己拼接起来得到的新字符串(比如 s1+s1),一定会包含 s2 作为子串。举个例子:waterbottle 拼接后是 waterbottlewaterbottle,你会发现 lewaterbott、bottlewater 这些旋转后的字符串都能在里面找到。不过要注意,必须先确保两个字符串长度相等,不然直接就可以排除了。

要重点处理的边缘情况

  • 如果两个字符串长度不一样,直接返回 false(长度不同不可能是旋转关系)
  • 两个都是空字符串:返回 true
  • 其中一个是空,另一个非空:返回 false
  • 两个字符串完全相同:这其实也是旋转的一种(旋转0次),应该返回 true

完整代码实现

function checkRotationStrings(s1, s2) {
    // 先处理长度不等的情况
    if (s1.length !== s2.length) {
        return false;
    }
    // 处理空字符串的特殊情况
    if (s1 === '' && s2 === '') {
        return true;
    }
    // 核心判断:s2是否是s1+s1的子串
    return (s1 + s1).includes(s2);
}

验证你的测试用例

咱们来跑一下你给的测试:

  • checkRotationStrings('waterbottle', 'lewaterbott') → true(符合预期)
  • checkRotationStrings('waterbottle', 'bottlewater') → true(符合预期)
  • checkRotationStrings('waterbottle', 'erbottlewat') → true(符合预期)
  • checkRotationStrings('waterbottle', 'lewaterbottx') → false(符合预期)

额外说明

这个方法的时间复杂度主要取决于字符串匹配的效率,JavaScript里的includes底层实现是高效的,所以整体复杂度是O(n)(n是字符串长度),比暴力枚举所有旋转情况要高效得多。如果之前的代码没处理好边缘情况,比如没判断长度或者空字符串,用这个版本应该就能解决啦!

内容的提问来源于stack exchange,提问作者user7496931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:00