Потому что некоторые комбинации создают пустую строку:
s1 = 'efgh'
s2 = 'abcd'
for i in range(0, len(s1)):
for j in range(1, len(s1) + 1):
if s1[i:j] in s2:
print('YES', i, j, repr(s1[i:j]))
Вывод:
YES 1 1 ''
YES 2 1 ''
YES 2 2 ''
YES 3 1 ''
YES 3 2 ''
YES 3 3 ''
Также может быть полезно просмотреть все случаи - бывает много случаев, когда условие if не проходит:
s1 = 'efgh'
s2 = 'abcd'
for i in range(0, len(s1)):
for j in range(1, len(s1) + 1):
print(s1[i:j] in s2, i, j, repr(s1[i:j]))
Вывод:
False 0 1 'e'
False 0 2 'ef'
False 0 3 'efg'
False 0 4 'efgh'
True 1 1 ''
False 1 2 'f'
False 1 3 'fg'
False 1 4 'fgh'
True 2 1 ''
True 2 2 ''
False 2 3 'g'
False 2 4 'gh'
True 3 1 ''
True 3 2 ''
True 3 3 ''
False 3 4 'h'