递归函数,找到string2的字符串1子串

时间:2018-03-17 15:45:07

标签: python python-2.7 function recursive-query

我试图找到一个带有两个字符串的递归函数,如果string1是string2的子字符串则返回true,否则返回false,否则如果str2以str1开头则递归检查。

我试试这段代码,但它不起作用我不知道为什么!

def main():
   s1 = input("enter string")
   s2 = input("enter steing")
   sub = subs(s1,s2)
   print(sub)

   def subs(s1, s2):
       if s2 == 0:
          return True
       else:
           if s2.startswith((s1)):
              subs(s1, s2[1:])
            return True 
   main()
谢谢你!

2 个答案:

答案 0 :(得分:0)

您的程序首先会遇到一些语法问题:

  1. 您在实际定义之前调用subs函数。
  2. 您的main()缩进已关闭。
  3. subsmain的内部函数。虽然技术上不正确,但使用内部函数会使代码更难以阅读。
  4. 您还有一些语义问题:

    1. subs仅在转义条件下返回true,没有默认的返回值。这是不好的做法
    2. subs正在检查s2 == 0,它永远不会是 - 字符串赢得等于0.空字符串是Falsy,所以你可以使用{{来检查字符串是否为空1}}而不是
    3. 您的逻辑规定只有在if not s2:s2开头时才会发生递归,这意味着如果s1 =' ab'并且s2 =' habc',即使s1是s2的子字符串,它也不会触发递归。
    4. 我的建议是重新检查你的算法。首先确定如何首先开始寻找候选子字符串,然后确定您的逃逸条件是什么,然后将问题分解为更小的问题。

答案 1 :(得分:-1)

我重写了你写的代码,但保持了直觉。主要问题是:

1.许多地方的注释错误。

2.调用后的函数定义。

3.找到空字符串的错误方法。

def main():

    def subs(s1, s2,k):
        #If input string is empty .
        if k==0 and not s2.strip():
            print("Yes")
            return 0
        #String 1 not empty and search for the sub-string.
        elif s1.strip() and s1.startswith(s2):
            print("Yes")
            return 0
        #String 1 not empty and sub-string not matched.
        elif s1.strip():
            subs(s1[1:],s2,1)
        #String empty and sub-string not match.
        else :
            print("No")



    s1 = input("enter string")
    s2 = input("enter sub-string")
    sub = subs(s1,s2,0)
    #print(sub)



main()