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

时间:2019-02-28 22:55:36

标签: recursion substring scheme racket

我正在尝试创建一个递归函数,该函数接收一个字符串string-1,并检查另一个字符串string-2是否为子序列。我有一些基本案例可以工作,但无法使整个程序正常工作。

我尝试做的是实现“成员”?功能。我希望它执行的操作是检查字符串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]))

上面提供的代码将处理清楚的赠品,这些赠品将告诉您单词是否为子集。

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

1 个答案:

答案 0 :(得分:1)

以hello和hlo为例。

  1. 如果两个字符串都从相同的字符中删除,那么两个字符串都应以相同的字符开头。

有了hello和hlo,就变成了ello和lo

  1. 如果字符串的开头字符与查询字符串的开头字符不同,请向前跳至该字符串的第一个字符与查询的第一个字符相同

使用ello和lo减少到llo和lo,然后再次应用规则1生成lo和o,其中规则2将其减少到o和o,规则1减少为两个空字符串

  1. 如果查询为空,则结果为匹配项。如果字符串为空,但查询不是,则结果不匹配。

根据规则3,结果为匹配项。