Что происходит этот код. Анаграмма как подстрока в строке

Я нашел этот вопрос размещенным здесь, но не смог прокомментировать или задать вопрос, поэтому я создаю новый вопрос.

Оригинальный пост заявил следующее:

t = "abd"
s = "abdc"

s тривиально содержит t. Однако, когда вы сортируете их, вы получаете строки abd и abcd, и сравнение не удается. Сортировка получает другие письма в пути.

Вместо этого вам нужно пройтись по s кусками размером t.

t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
for start in range(s_len - t_len + 1):
   chunk = s[start:start+t_len]
   if t_sort == sorted(chunk):
   # SUCCESS!!

В цикле for почему они берут S-len и затем вычитают t_len? Почему они добавляют 1 в конце?

1 ответ

alvits и d_void уже объяснили значение start; Я не буду повторять это.

Я настоятельно рекомендую вам изучить основы отладки трассировки. Вставьте несколько полезных операторов печати, чтобы следить за выполнением. Например:

Код:

t = "goal"
s = "catalogue"

t_len = len(t)
s_len = len(s)
t_sort = sorted(t)
print "lengths & sorted", t_len, s_len, t_sort

for start in range(s_len - t_len + 1):
   chunk = s[start:start+t_len]
   print "LOOP start=", start, "\tchunk=", chunk, sorted(chunk)
   if t_sort == sorted(chunk):
      print "success"

Выход:

lengths & sorted 4 9 ['a', 'g', 'l', 'o']
LOOP start= 0   chunk= cata ['a', 'a', 'c', 't']
LOOP start= 1   chunk= atal ['a', 'a', 'l', 't']
LOOP start= 2   chunk= talo ['a', 'l', 'o', 't']
LOOP start= 3   chunk= alog ['a', 'g', 'l', 'o']
success
LOOP start= 4   chunk= logu ['g', 'l', 'o', 'u']
LOOP start= 5   chunk= ogue ['e', 'g', 'o', 'u']

Это помогает проиллюстрировать, что происходит в цикле?

Другие вопросы по тегам