📅  最后修改于: 2023-12-03 14:56:54.406000             🧑  作者: Mango
给定一个数组,判断其中是否存在一个字符串,其反向也存在于同一数组中。
暴力枚举法即遍历数组中的每个字符串,分别将其翻转后与数组中的其他字符串比较是否存在相等的字符串。
代码实现:
def exists_reverse(arr):
for i in range(len(arr)):
for j in range(i+1, len(arr)):
if arr[i][::-1] == arr[j]:
return True
return False
# 测试
arr = ['abc', 'def', 'cba']
print(exists_reverse(arr)) # True
时间复杂度:$O(N^2)$,其中 $N$ 是数组长度。
可以利用一个集合存储已经遍历过的字符串,对于每一个新的字符串判断其翻转后是否在集合中存在。
代码实现:
def exists_reverse(arr):
s = set()
for s0 in arr:
if s0[::-1] in s:
return True
s.add(s0)
return False
# 测试
arr = ['abc', 'def', 'cba']
print(exists_reverse(arr)) # True
时间复杂度:$O(N)$,其中 $N$ 是数组长度。
本题主要考验程序员对于字符串操作的熟练程度,两种方法都可以实现有效解决问题,但是方法二的时间复杂度更优,应优先选择。