Recursion 如何检查一个字符串是否是scheme中另一个字符串的子序列

Recursion 如何检查一个字符串是否是scheme中另一个字符串的子序列,recursion,substring,scheme,racket,Recursion,Substring,Scheme,Racket,我试图创建一个递归函数,它接收字符串string-1并检查另一个字符串string-2是否是子序列。我得到了一些基本案例,但无法使整个程序工作 我尝试的是实现“member?”函数。我想让它做的是检查字符串2中的每个元素是否都是字符串1的一部分,而且还要检查它们是否按顺序排列 例如,给定字符串:hello,如果另一个字符串是:hel、ell、ello、hello或hlo,则函数将生成true。如果另一个字符串是:ehl、oll或helllo,则函数将生成false (define (possib

我试图创建一个递归函数,它接收字符串string-1并检查另一个字符串string-2是否是子序列。我得到了一些基本案例,但无法使整个程序工作

我尝试的是实现“member?”函数。我想让它做的是检查字符串2中的每个元素是否都是字符串1的一部分,而且还要检查它们是否按顺序排列

例如,给定字符串:hello,如果另一个字符串是:hel、ell、ello、hello或hlo,则函数将生成true。如果另一个字符串是:ehl、oll或helllo,则函数将生成false

(define (possible-subset? word subset-word)
  (cond [(> (length (string->list subset-word)) (length (string->list word)) ) false]
        [(equal? (string->list word) (string->list subset-word)) true]))
上面给出的代码会告诉你这个词是否是一个子集


任何帮助都将不胜感激。谢谢。

以hello和hlo为例

  • 两个字符串是否都以相同的字符开头,如果它们都从两个字符串中删除了该字符
  • 有了这个hello和hlo就变成了ello和lo

  • 如果字符串不是以与查询字符串相同的字符开头,请在字符串中向前跳,直到字符串的第一个字符与查询的第一个字符相同
  • 当ello和lo减少为llo和lo时,规则1再次应用,产生lo和o,其中规则2将其减少为o和o,规则1将其减少为两个空字符串

  • 如果查询为空,则结果为匹配。如果字符串为空但查询为非空,则结果不匹配
  • 根据规则3,结果是匹配的。

    相关: