Нехай містить алфавіт, а — рядок, який почув Фермер Джон. Будемо послідовно обробляти символи рядка , щоразу знаходячи поточний символ в алфавіті . При цьому будемо рухатися по алфавіту зліва направо, починаючи новий прохід з його початку щоразу, коли потрібна буква знаходиться лівіше попередньої.
Приклад
У прикладі cowphabet впорядкований так само, як звичайний алфавіт. Бессі має пробурмотіти cowphabet як мінімум рази. Нижче показано, як Бессі бурмотіла, а великими літерами виділені ті букви, які почув Фермер Джон.
Реалізація алгоритму
Читаємо алфавіт та рядок .
cin >> alph;
cin >> s;Кількість проходів по алфавіту будемо підраховувати у змінній .
cnt = 0;Змінною будемо послідовно перебирати символи рядка .
for (i = 0; i < s.size(); )
{Змінною будемо перебирати букви алфавіту. Як тільки в алфавіті зустрінеться чергова потрібна буква , збільшуємо на .
for (j = 0; j < alph.size(); j++)
if (s[i] == alph[j]) i++;
cnt++;
}Виводимо відповідь.
cout << cnt << endl;