Алиса разрабатывает обучающую игру для младших школьников. В ней игроку дается строка из строчных символов латиницы, а он должен разбить ее на подстроки из последовательных символов алфавита. Такие подстроки далее будем называть правильными. В правильной подстроке после буквы “a” должна идти буква “b”, после “b” — “c” и так далее. При этом правильная подстрока может начинаться с любого символа. Например, строка “bcdefaabcef” должна быть разбита на “bcdef”+”a”+”abc”+”ef”. Обратите внимание, что подстрока может состоять и из одного символа.
Дана строка s = "bcdefaabcef"
count = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1. Первый символ 'b' не может быть правильной подстрокой, поэтому `count[0] = 0`
2. Второй символ 'c' - это первая буква алфавита, поэтому мы можем считать его отдельной правильной подстрокой. Значит, `count[1] = 1`.
3. Следующий символ 'd' - это вторая буква алфавита, исходящая из 'c'. Мы можем добавить этот символ к предыдущей правильной подстроке, которая заканчивается на `s[1]`. Таким образом, `count[2] = count[1] + 1 = 2`.
4. Символ 'e' также является следующим символом алфавита исходящего из 'd'. Аналогично, `count[3] = count[2] + 1 = 3`.
5. Так как дальше следуют символы 'f', 'a', 'a', 'b', которые не связаны с предыдущими символами, то `count[4] = count[5] = count[6] = count[7] = 0`.
6. Символ 'c' является следующим символом после 'b', значит `count[8] = count[7] + 1 = 1`.
7. Следующий символ 'e' является следующим после 'c', и исходит вторая буква алфавита, поэтому `count[9] = count[8] + 1 = 2`.
Теперь у нас есть массив `count[]`:
count = [0, 1, 2, 3, 0, 0, 0, 0, 1, 2, 0, 0]
Шаг 2: Вычисление массива `dp[]`
Мы будем проходить по каждому символу в строке `s` и обновлять массив `dp[]`. Изначально все элементы массива `dp[]` будут равны нулю. Рассмотрим пример:
Дана строка s = "bcdefaabcef"
dp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1. Первый символ 'b' не может быть правильной подстрокой, поэтому `dp[0] = 0`
2. Символ 'c' - это первая буква алфавита, поэтому мы можем считать его правильной подстрокой. Значит, `dp[1] = 1`.
3. Символ 'd' является следующим символом алфавитной последовательности, значит, `dp[2] = dp[1] + count[2] = 1 + 2 = 3`.
4. Символ 'e' также является следующим символом алфавитной последовательности, поэтому `dp[3] = dp[2] + count[3] = 3 + 3 = 6`.
5. Так как дальше следуют символы 'f', 'a', 'a', 'b', которые не связаны с предыдущими символами, то `dp[4] = dp[5] = dp[6] = dp[7] = 0`.
6. Символ 'c' является следующим символом после 'b', поэтому `dp[8] = dp[7] + count[8] = 0 + 1 = 1`.
7. Символ 'e' следует после символа 'c' и исходит из второй буквы алфавита, поэтому `dp[9] = dp[8] + count[9] = 1 + 2 = 3`.
Теперь у нас есть массив `dp[]`:
dp = [0, 1, 3, 6, 0, 0, 0, 0, 1, 3, 0, 0]
Итоговый ответ на задачу - значение `dp[n-1]`, где `n` - длина строки `s`. В данном случае `n = 12`, поэтому ответом будет `dp[11] = 0`.
Таким образом, для данной строки "bcdefaabcef" количество правильных подстрок равно 0.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет