我有这个函数来确定列表是否是另一个列表的轮换:
def isRotation(a,b):
if len(a) != len(b):
return False
c=b*2
i=0
while a[0] != c[i]:
i+=1
for x in a:
if x!= c[i]:
return False
i+=1
return True
Run Code Online (Sandbox Code Playgroud)
例如
>>> a = [1,2,3]
>>> b = [2,3,1]
>>> isRotation(a, b)
True
Run Code Online (Sandbox Code Playgroud)
如何使用重复项进行此操作?例如
a = [3,1,2,3,4]
b = [3,4,3,1,2]
Run Code Online (Sandbox Code Playgroud)
它可以及时完成O(n)吗?
当然有一些东西,但谷歌搜索没有给我我正在寻找的东西.也许是因为我不知道要注意的算法的名称?
基本上,我有两个内容和大小相同的列表.
List1: {10, 30, 2, 4, 4}
List2: {4, 4, 10, 30, 2}
Run Code Online (Sandbox Code Playgroud)
请注意,两个列表的顺序相同.即:List2可以看作是从List1中的上一个位置到最后一个位置的开始,并且继续从List1的开始迭代直到返回到起始位置.
List1: {10, 30, 2, 4, 4} 10, 30, 2
| | | | |
List2: {4, 4, 10, 30, 2}
Run Code Online (Sandbox Code Playgroud)
然后将这两个列表视为等效.
以下两个列表不是:
List1: {10, 30, 2, 4, 3} 10, 30, 2
| | X X |
List2: {4, 4, 30, 10, 2}
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是将List1连接到自身并在其中搜索List2.
我觉得这个效率不高.
假设我想迭代每个列表一次?
好吧,最后我使用了algo描述:检查字符串是否是另一个字符串的旋转而不连接 并将其调整为我的数据类型.