python - 如何在python中使用递归检查一个字符串是否是另一个字符串的后续?
问题描述
目标: 所以我的目标是编写一个递归函数 is_subsequent,给定两个字符串,返回第一个字符串是否是第二个字符串的子序列。例如,给定 hac 和 cathartic,你应该返回 true,但给定 bat 和 table,你应该返回 false。
我试图编写代码来检查一个字符串是否是另一个字符串的子字符串。这是我的代码:
def is_subsequent(str1, str2):
x = 0
if (all(i in str2 for i in str1)):
x = 1
if (x):
return True
else:
return False
但它不关心字符串的顺序。我想编写一个考虑到目标中提到的顺序的代码。并使用递归解决它。
解决方案
递归背后的基本思想是你的函数做了两件不同的事情:
- 如果答案真的很简单,它会返回答案。(这是一个“基本情况”。)
- 否则,它会想办法让问题变得更简单,并调用自己来解决问题的更简单版本。(调用自身的函数就是“递归”的意思。)
在这个问题的情况下,您有两个基本情况:
- 如果第一个字符串为空,则它是任何的子序列,所以就是
True
. - 如果第二个字符串为空(而第一个字符串不是),则没有任何内容可以是它的子序列,所以
False
.
然后你有两种方法可以使问题变得更容易(即通过使一个或两个字符串更小):
- 如果第一个字符匹配,则答案与您在减去第一个字母的两个字符串上调用该函数相同。(也就是说,
ac
是artic
IFFc
的子序列是 的子序列rtic
。) - 如果不是,那么答案与您使用相同的第一个字符串但减去第二个字符串的第一个字母相同(也就是说,IFF的子
hac
序列是 的子序列。)cathartic
hac
athartic
>>> def is_subsequence(needle: str, haystack: str) -> bool:
... if not needle:
... return True
... if not haystack:
... return False
... if needle[0] == haystack[0]:
... return is_subsequence(needle[1:], haystack[1:])
... return is_subsequence(needle, haystack[1:])
...
>>> is_subsequence("hac", "cathartic")
True
>>> is_subsequence("bat", "table")
False
推荐阅读
- nestjs - NestJS Config 部分注册和验证
- javascript - 错误:使用 sendgrid 时找不到模块“sendgrid”
- kotlin - 即使 LiveData 包含一个值,它也会返回空值
- glsl - 在 WebGL 中将数据放到不同的纹理上并将其取出
- python - 为什么列表附加在 discord.py 中不起作用?
- mysql - 如何使用 json_extract mysql 8.0 识别空值
- r-markdown - 合并 Rmarkdown 中 kable 创建的乳胶表中的列标题
- javascript - 使用reduce获取React电子商务购物篮中的支付总额
- graph - 一次单一产品
- c# - 如何在 c# .net 标准中动态加载本机 dll?