📜  给定数组中的第一个字符串,其反向也存在于同一数组中(1)

📅  最后修改于: 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$ 是数组长度。

总结

本题主要考验程序员对于字符串操作的熟练程度,两种方法都可以实现有效解决问题,但是方法二的时间复杂度更优,应优先选择。