#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