Как проверить, присутствует ли подстрока в родительской строке в том же порядке

#python #python-3.x #python-2.7 #dynamic-programming

Вопрос:

Ввод

 Indian
3
nda
dan
ndani
 

Выход

 True
True
False
 

Объяснение
1-я строка-это родительская строка
2-я строка-это номер тестового случая
Следующие n строк — это запросы

Первая и вторая подстроки запроса расположены в том же порядке, что и в родительской строке.

Ответ №1:

для каждого запроса инициализируйте указатель в начале строки запроса, увеличивайте его только в том случае, если вы сопоставляете алфавит из родительской строки при циклическом просмотре родительской строки

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

Вы можете сделать это для каждого запроса.

Ответ №2:

Вы можете сделать это, создав регулярное выражение из подстроки, с которой вы пытаетесь сопоставить. Например, для первого тестового случая, если вы хотите знать, можно ли найти » nda » в «индийском», затем сформируйте регулярное выражение n.*d.*a и выполните поиск этого выражения в «индийском»:

 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
 

Ответ №3:

Вам просто нужно сверить каждый символ с индексом основной строки от i до конца. Вы можете попробовать это:

 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')
 

Это не очень эффективно и интуитивно понятно, но это помогает выполнить работу (я думаю). Вы можете просто изменить код в соответствии с вашими вводимыми данными

Ответ №4:

Это очень простая программа. Но это сработает —

 string = 'Indian'
words = ['3','nda','dan','ndani']

for sub in words:
    if sub in the string:
       return True
    else:
       return False
 

Ответ №5:

Это мой подход — использовать итэр.

 def isSubsequence(sub: str, orig: str) -> bool:

    it = iter(orig)            # 

    return all(ch in orig for ch in sub)


if __name__ == '__main__':
    sub =  'rice'
    orig =  'practice'

    assert isSubsequence(sub, orig)   == True
    assert isSubsequence('pace', orig)  == True
    assert isSubsequence('acts', orig)  == False