Что происходит этот код. Анаграмма как подстрока в строке
Я нашел этот вопрос размещенным здесь, но не смог прокомментировать или задать вопрос, поэтому я создаю новый вопрос.
Оригинальный пост заявил следующее:
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']
Это помогает проиллюстрировать, что происходит в цикле?