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

如何判断两个数组元素相同且顺序一致(含旋转场景)

判断数组是否为原数组的旋转版本

假设有原数组:

[1,2,3,4,5,6]

以及旋转后的数组:

[3,4,5,6,1,2]

有没有简便方法判断二者是否匹配,还是必须编写特定的比较逻辑?

补充说明:原数组不应与以下数组匹配:

[4,3,5,6,1,2]    // 4和3位置互换
[1,2,4,3,5,6]    // 4和3位置互换

或是:

[1,2,3,4,5,6,7]  // 元素数量过多

有个非常实用的简便方法,核心逻辑很简单:如果数组B是数组A的旋转版本,把A拼接一次得到A+A,这个新数组里必然包含B作为连续子序列。不过要注意几个关键细节:

  1. 先查长度:两个数组长度不一样的话直接判定不匹配,比如例子里那个多了一个7的数组,根本不用往下走。
  2. 避免数字歧义:因为是数字数组,直接拼接可能出问题(比如元素12和1、2混在一起),所以最好把数组转成带分隔符的字符串再处理,比如用逗号分隔。

举个实际操作的例子:

  • 原数组转字符串:"1,2,3,4,5,6"
  • 拼接自身后得到:"1,2,3,4,5,6,1,2,3,4,5,6"
  • 旋转后的数组转字符串是"3,4,5,6,1,2",一眼就能看到它是拼接后字符串的子串,所以判定匹配。

而像[4,3,5,6,1,2]转成字符串是"4,3,5,6,1,2",不在拼接后的字符串里,自然会被判定为不匹配,完全符合你的要求。

具体步骤总结:

  • 若两个数组长度不同,直接返回false
  • 把两个数组分别转成用相同分隔符(比如逗号)连接的字符串
  • 检查拼接后的原数组字符串(strA + strA)是否包含旋转数组的字符串strB,包含则返回true,否则返回false

这个方法比写循环逐个比对的逻辑简洁太多,针对数字数组完全够用;如果是处理复杂对象数组的话,这个方法不适用,但你的场景完全没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:35:27