Что не так в том, что я нахожу частоту подстроки в strng

#python

Вопрос:

Я пытаюсь найти ответ «нет». вхождения подстроки в строку. Я знаю, что count эту функцию можно использовать, но она предназначена для неперекрывающихся случаев.

Вот мой код, который я нашел в Интернете

 string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0

for i in range(0, len(string)):
    for j in range(0, len(sub_string)):
        if string[i] == sub_string[j]:
            j  = 1
        else:
            j = 0
    if j == len(sub_string):
        count  = 1

print(count)
 

При этом во 2-м цикле мы сравниваем каждый элемент sub_string[j] с string[i] тем, который одинаков в этом цикле, затем, как j увеличит и увеличит количество после проверки следующего условия if.

Вывод кода идет сюда

Ответ №1:

Таким образом, код, который у вас есть, неверен, так как он будет проходить проверку if до тех пор, пока последний символ совпадает со строкой, например, строка "sagar is sagar not sa saga sagar r" и подстрока "sagar" вернут 4, а не 3.

Поскольку вы используете j и то, и другое для подсчета количества совпадений, а также индекса для подстроки, она перезаписывается во внутреннем цикле на каждой итерации. Это означает, что для прохождения проверки под циклом потребуется только совпадение с самой последней буквой.

Возможно, вы захотите изменить его на что-то, что проверяет каждый символ, начинающийся с некоторой позиции, и отрицает его, если он не совпадает, например

 string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0

for i in range(0, len(string) - len(sub_string)):
    found = True
    for j in range(len(sub_string)):
        if string[i   j] != sub_string[j]:
            found = False
            break
    if found:
        count  = 1
 

Ответ №2:

В вашем случае только последние элементы равны, тогда количество увеличится на единицу.

например: если строка есть seg , а подстрока есть sag , то количество будет равно единице. это происходит потому , что во втором цикле when j = len(substring)-1 , g from seg и sag будут определены как равные. итак, затем подсчитайте, получите приращение на единицу.

 string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0

for i in range(0, len(string)):
    j=0
    while i j< len(string) and  j <len(sub_string):
        if string[i j] == sub_string[j]:
            j  = 1
        else:
            break
    else:
        count  = 1

print(count)
 

попробуйте этот код, если в цикле while не было увеличения числа остановок на единицу.