#python #python-3.x
#python #python-3.x
Вопрос:
Учитывая 2 строки, a и b, верните количество позиций, в которых они содержат подстроку одинаковой длины 2. Таким образом, «xxcaazz» и «xxbaaz» дают 3, поскольку подстроки «xx», «aa» и «az» отображаются в одном и том же месте в обеих строках.
Для решения этой проблемы я написал следующий код :
def string_match(a, b):
result = 0
tiniest = b
biggest = a
if len(a) < 2 or len(b) < 2:
return 0
if len(a) < len(b):
tiniest = a
print('tiniest is {} and size minus 1 equals
{}'.format(str(tiniest), len(tiniest)-1))
biggest = b
else:
tiniest = b
print('ELSE tiniest is {} and size minus 1 equals {}'.format(str(tiniest), len(tiniest) - 1))
biggest = a
for i in range(len(tiniest) - 1):
print(i)
if tiniest[i:i 2] == biggest[i:i 2]:
print('tiniest is {} and biggest is {} and i is
{}'.format(tiniest[i:i 2], biggest[i:i 2], i))
result = result 1
else:
continue
print("result is ",result)
return result
Итак, для теста :
string_match(‘helloooo’, ‘hello’) или string_match(‘hello’, ‘привет’) => без проблем функция возвращает 4, как и ожидалось
Но как только первый параметр становится меньше второго, ничего больше не работает, по причине, которую я не понимаю: string_match(‘hell’, ‘hello’) => ничего не делает , почему???
Я не вижу разницы между моим решением и официальным решением этой проблемы, которое:
def string_match(a, b):
# Figure which string is shorter.
shorter = min(len(a), len(b))
count = 0
# Loop i over every substring starting spot.
# Use length-1 here, so can use char str[i 1] in the loop
for i in range(shorter - 1):
a_sub = a[i:i 2]
b_sub = b[i:i 2]
if a_sub == b_sub:
count = count 1
return count
Также можно ли инициализировать переменные result tiniest и biggest в начале функции?
Спасибо
Комментарии:
1. Цикл For имеет отступ внутри условия else, что может быть проблемой.
2. Принимаете ли вы другое решение, которое лучше, чем у вас есть в настоящее время?
3. @ksholla20 возможно, вы определенно правы.
4. @Austin конечно, я согласен, я просто не мог понять, почему мой код не работает. Но это из-за плохого отступа… я новичок в python 🙂
Ответ №1:
На самом деле это была проблема с отступом. Цикл for находился внутри отступа else. Поместив цикл for на тот же уровень, что и оператор else, решил ее:
def string_match(a, b):
result = 0
tiniest = b
biggest = a
if len(a) < 2 or len(b) < 2:
return 0
if len(a) < len(b):
tiniest = a
print('tiniest is {} and size minus 1 equals {}'.format(str(tiniest), len(tiniest)-1))
biggest = b
else:
tiniest = b
print('ELSE tiniest is {} and size minus 1 equals {}'.format(str(tiniest), len(tiniest) - 1))
biggest = a
for i in range(len(tiniest) - 1):
print(i)
if tiniest[i:i 2] == biggest[i:i 2]:
print('tiniest is {} and biggest is {} and i is {}'.format(tiniest[i:i 2], biggest[i:i 2], i))
result = result 1
else:
continue
print("result is ",result)
return result