如何检查子字符串是否以相同的顺序出现在父字符串中

2024-09-30 18:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

输入

Indian
3
nda
dan
ndani

输出

True
True
False

解释 第1行是父字符串 第二行是测试用例的编号 接下来的n行是查询

第一个和第二个查询子字符串的顺序与父字符串中的顺序相同


Tags: 字符串falsetrue顺序测试用例编号indiandan
3条回答

您只需要根据主字符串索引从头到尾检查每个字符。 您可以尝试以下方法:

main_str = 'Indian'
words = ['nda','dan','ndani']

for word in words:
    checker = []

    for i in range(len(main_str)):
        if i == len(word):
            break

        if word[i] in main_str[i::]:
            checker.append('True')
        else:
            checker.append('False')

    if 'False' in checker:
        print('False')
    else:
        print('True')

这不是很有效率和直观,但它完成了工作(我认为)。您可以修改代码以适应您的输入

可以通过从要匹配的子字符串创建正则表达式来实现这一点。例如,对于第一个测试用例,如果您想知道在“Indian”中是否可以找到“nda”,则形成正则表达式n.*d.*a,并在“Indian”中搜索该表达式:

import re

string = 'Indian'
substrings = [
    'nda',
    'dan',
    'ndan1'
]

for substring in substrings:
    rex = '.*'.join(re.escape(ch) for ch in substring) # 'n.*d.*a'
    print('True' if re.search(rex, string) else 'False')

印刷品:

True
True
False

对于每个查询,在查询字符串的开头初始化一个指针,仅当在父字符串中循环时匹配父字符串中的字母表时,才递增该指针

start = 0
for x in parent:
    if x == query[start]:
        start += 1
        if start == len(query):
            print(True)
            break
else:
    print(False)

您可以对每个查询执行此操作

相关问题 更多 >