繁体   English   中英

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

[英]How to check if string1 is the reverse of string2 using recursion (python)

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

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()

但是我在弄清楚如何检查一个字符串是否等于给定两个字符串的第二个字符串时遇到麻烦。 我希望输出是正确的,如果它是反向的,则返回false,如果不是反向的。 大写和小写字母被忽略。 这是我到目前为止的内容:

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

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

由于您的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]

如果两个字符串都为空,则它们显然是镜像。 否则,比较首字母和尾字母,然后递归其余字符。

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)
>>> qq = 'xyz'
>>> ww = 'zyx'
>>> qq == ww
 False
>>> ww[::-1]
 'xyz'
>>> qq == ww[::-1]
 True

use可以使用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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM