sabitaiganym
10.09.2021 03:55

Объясните как это работает

int q;

void count(string s, string l)
{
int pos, k = 0;
while (s.find(l) ! = -1)
{
pos = s.find(l) + 1;
k++;
s = s.substr(pos);
}
q = k;
}

void solve()
{
task("str41");
string s, l;
pt > > s > > l;
count(s, l);
pt < < q;
}​

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
LoStEk
10.10.2020 13:23

Объяснение:

Это весьма неэффективный алгоритм вычисления количества подстрок l в строке s. Работает так:

1) Функция find ищет первое вхождение строки l в строку s: индекс начала вхождения pos. Например, s = "xxxabdcabd", l = "abd". Сделаем так:

int pos = s.find(l);

Первым вхождением строки l в строку s является выделенная часть: "xxxabdcabd". В переменной pos будет храниться индекс буквы a, то есть 3.

Если вхождения нет, то в pos будет находиться -1.

2) Если вхождение есть, то увеличиваем счетчик подстрок. Теперь нам нужно искать подстроку l в строке s, начиная с позиции pos+1. Для этого в коде исходная строка обрезается с функции substr. Была "xxxabdcabd", стала "bdcabd".

Пример: s = s.substr(3+1);

Теперь в строке s удалены символы с индексами от 0 до 3 включительно.

Далее снова ищем первое вхождение строки l в уже новой строке s:

"bdcabd". Увеличиваем счетчик, снова обрезаем строку. Теперь s = "bd".

Снова попытаемся найти первое вхождение строки "abd" в уже строку "bd". Вхождения нет, s.find(l) == -1, завершаем цикл.

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота