📜  Python – 检查两个字符串是否旋转等价

📅  最后修改于: 2022-05-13 01:54:53.443000             🧑  作者: Mango

Python – 检查两个字符串是否旋转等价

有时,在使用Python字符串时,我们可能会遇到问题,我们需要检查一个字符串是否可以在左右旋转时从另一个字符串派生。这类问题可以在许多领域都有应用,例如 Web 开发和竞争性编程。让我们讨论可以执行此任务的某些方式。

方法#1:使用循环+字符串切片
上述功能的组合可以用来解决这个问题。在此,我们执行提取字符串以执行所有可能的旋转的任务,以检查是否有任何旋转等于另一个字符串。

# Python3 code to demonstrate working of 
# Check if two strings are Rotationally Equivalent
# Using loop + string slicing
  
# initializing strings
test_str1 = 'geeks'
test_str2 = 'eksge'
  
# printing original strings
print("The original string 1 is : " + str(test_str1))
print("The original string 2 is : " + str(test_str2))
  
# Check if two strings are Rotationally Equivalent
# Using loop + string slicing
res = False
for idx in range(len(test_str1)):
        if test_str1[idx: ] + test_str1[ :idx] == test_str2:
            res = True
            break
  
# printing result 
print("Are two strings Rotationally equal ? : " + str(res)) 
输出 :
The original string 1 is : geeks
The original string 2 is : eksge
Are two strings Rotationally equal ? : True

方法 #2:使用any() + join() + enumerate()
这是可以执行此任务的方式之一。在此,我们使用嵌套生成器表达式和 enumerate() 提取的 any() 执行检查任何旋转等价的任务。

# Python3 code to demonstrate working of 
# Check if two strings are Rotationally Equivalent
# Using any() + join() + enumerate()
  
# initializing strings
test_str1 = 'geeks'
test_str2 = 'eksge'
  
# printing original strings
print("The original string 1 is : " + str(test_str1))
print("The original string 2 is : " + str(test_str2))
  
# Check if two strings are Rotationally Equivalent
# Using any() + join() + enumerate()
res = any(''.join([test_str2[idx2 - idx1] 
        for idx2, val2 in enumerate(test_str2)]) == test_str1
        for idx1, val1 in enumerate(test_str1))
  
# printing result 
print("Are two strings Rotationally equal ? : " + str(res)) 
输出 :
The original string 1 is : geeks
The original string 2 is : eksge
Are two strings Rotationally equal ? : True