Я делаю эту проблему https://www.spoj.com/problems/DIVSTR/
Нам даны две строки S и T.
S делится на строку T, если существует некоторое неотрицательное целое число k, удовлетворяющее уравнению S = k * T
Какое минимальное количество символов должно быть удалено из S, чтобы S делилось на T?
Основная идея состояла в том, чтобы сопоставить T с S с помощью указателя и подсчитать количество экземпляров T, встречающихся в S, когда подсчет завершен, перенести указатель в начало T и, если есть несоответствие, сравнить первую букву T с настоящим письмом С.
Этот код прекрасно работает с предоставленными ими тестовыми примерами и пользовательскими тестовыми примерами, но он не смог пройти через скрытые тестовые примеры.
это код
def no_of_letters(string1,string2):
# print(len(string1),len(string2))
count = 0
pointer = 0
if len(string1)<len(string2):
return len(string1)
if (len(string1)==len(string2)) and (string1!=string2):
return len(string1)
for j in range(len(string1)):
if (string1[j]==string2[pointer]) and pointer<(len(string2)-1):
pointer+=1
elif (string1[j]==string2[pointer]) and pointer == (len(string2)-1):
count+=1
pointer=0
elif (string1[j]!=string2[pointer]):
if string1[j]==string2[0]:
pointer=1
else:
pointer = 0
return len(string1)-len(string2)*count
Единственное место, где, как мне кажется, должна быть путаница, это когда одни и те же буквы могут быть частями двух пунктов, но это не должно быть проблемой, потому что наш ответ не должен принимать во внимание дублирование.
например, S = 'akaka' T = 'aka' даст выход 2, независимо от того, будет ли первый 'aka', ka считать или вторым ak, 'aka'.