如何使用递归(python)检查string1是否与string2相反

时间:2017-12-06 04:39:49

标签: python function recursion boolean

我知道如何使用递归来反转字符串

def reverse(s):
    if len(s) == 0:
        return s
    return s[-1] + reverse(s[0 : -1])

def main() :
    r = reverse("Hello!")
    print(r)
    print("Expected: !olleH")
main()

然而,我无法弄清楚如何检查一个字符串是否与第二个给定的两个字符串相反。我希望输出如果是反向则为true,如果不相反则为false。资本和小写被忽略了。这就是我到目前为止所做的:

def isReversed(str1, str2):
    if len(str1) != len(str2):
        return False

我不确定如何使用两个参数调用自身内部的函数。

3 个答案:

答案 0 :(得分:0)

由于你的reverse()函数是好的,你可以比较字符串str1,看它是否与str2相反:

def isReversed(str1, str2):
    return str1 == reverse(str2)

因为,如果str1和str2实际上是相反的,那么反转其中一个应该使它们匹配。

如果你真的想忽略大小写,那么:

def isReversed(str1, str2):
    return str1.lower() == reverse(str2).lower()

您还可以使用str1[::-1]进行简单的字符串撤消,以便检查是否str1 == str2[::-1]

答案 1 :(得分:0)

如果两个字符串都是空的,则它们显然是镜像。否则,比较第一个和最后一个字母并递归其余字符。

def helper(s1, s2):
    if s1 == "" == s2:  # short for s1 == "" and s2 == ""
        return True
    else:
        return s1[0] == s2[-1] and mirror_images(s1[1:], s2[:-1])

以上假设字符串长度相同;在开始递归之前最好检查一次:

def mirror_image(s1, s2):
    return len(s1) == len(s2) and helper(s1, s2)

答案 2 :(得分:0)

>>> qq = 'xyz'
>>> ww = 'zyx'
>>> qq == ww
 False
>>> ww[::-1]
 'xyz'
>>> qq == ww[::-1]
 True

使用可以使用lower()来处理这种情况 这是一个更全面的解决方案:

In [130]: def rev(x, y):
     ...:     if x == '' and y == '':
     ...:         return True
     ...:     elif x == '' or y == '':
     ...:         return False
     ...:     elif x[0].lower() != y[-1].lower():
     ...:         return False
     ...:     else:
     ...:         return rev(x[1:], y[:-1])
     ...:     
     ...:         
In [131]: rev('abc', 'cba')
Out[131]: True
In [132]: rev('abc', 'cb')
Out[132]: False
In [133]: rev('abc', '')
Out[133]: False
In [134]: rev('', '')
Out[134]: True