gpt4 book ai didi

python - 检查一个字符串的字母在另一个字符串中是否按顺序排列

转载 作者:太空狗 更新时间:2023-10-29 20:57:36 25 4
gpt4 key购买 nike

如果它只是检查 test_string 中的字母是否也在 control_string 中,

我不会遇到这个问题。

我将简单地使用下面的代码。

if set(test_string.lower()) <= set(control_string.lower()):
return True

但我还面临一个相当复杂的任务,即辨别

control_string 与 test_string 中的顺序相同。

例如,

test_string = 'Dih'
control_string = 'Danish'
True

test_string = 'Tbl'
control_string = 'Bottle'
False

我想到了使用 for 迭代器来比较字母的索引,但是很难想到合适的算法。

for i in test_string.lower():
for j in control_string.lower():
if i==j:
index_factor = control_string.index(j)

我的计划是将主索引因子与下一个因子进行比较,如果主索引因子比另一个大,则该函数返回 False。

我对如何在 for 循环中比较这些 index_factors 很困惑。

我该如何解决这个问题?

最佳答案

您可以将测试 字符串中的字符加入 到一个regular expression 中。 ,允许任何其他字符 .* 之间,然后 re.search control 字符串中的该模式。

>>> test, control = "Dih", "Danish"
>>> re.search('.*'.join(test), control) is not None
True
>>> test, control = "Tbl", "Bottle"
>>> re.search('.*'.join(test), control) is not None
False

不使用正则表达式,您可以从 control 字符串创建一个 iter 并使用两个嵌套循环,1) break 从内部循环开始,else 返回 False 直到 test 中的所有字符都在 control 中找到>。创建 iter 很重要,即使 control 已经是可迭代的,这样内部循环将从上次停止的地方继续。

def check(test, control):
it = iter(control)
for a in test:
for b in it:
if a == b:
break
else:
return False
return True

您甚至可以使用 allany 在一行(好吧,两行)中执行此操作:

def check(test, control):
it = iter(control)
return all(any(a == b for b in it) for a in test)

这两种方法的复杂度应该是 O(n),n 是最大字符数。

1) 这在概念上类似于 @jpp确实如此,但恕我直言,更清楚一些。

关于python - 检查一个字符串的字母在另一个字符串中是否按顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53298874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com