Дана строка, состоящая из целых чисел от 0 до 9. Задача состоит в том, чтобы подсчитать количество подстрок, которые при преобразовании в целое делятся на 6. Подстрока не содержит начальных нулей.
Примеры:
Input : s = "606". Output : 5 Substrings "6", "0", "6", "60", "606" are divisible by 6. Input : s = "4806". Output : 5 "0", "6", "48", "480", "4806" are substring which are divisible by 6.
Метод 1: (грубая сила) Идея состоит в том, чтобы найти все подстроки данной строки и проверить, делится ли подстрока на 6 или нет .
Сложность времени: O (n 2 ).
Метод 2: (Динамическое программирование) Как обсуждалось в разделе Проверка, делится ли большое число на 6 или нет . Число делится на 6, если последняя цифра делится на 2, а сумма цифр делится на 3.
Идея состоит в том, чтобы использовать динамическое программирование, которое позволяет нам быстро и эффективно вычислять ответы, отслеживая ранее вычисленные ответы и используя эти сохраненные ответы вместо пересчета значений.
Пусть f (i, m) будет количеством строк, начинающихся с индекса i, а сумма их цифр по модулю 3 (пока) равна m, а число, которое он представляет, является четным . Итак, наш ответ будет
Пусть x будет i- ой цифрой в строке. Из f (i, m) нам нужно найти все четные подстроки, которые начинаются в i + 1.
Кроме того, мы получим дополнительную подстроку, если (x + m) сама делится на 3, а x четно. Итак, мы получаем отношение повторения
// We initially pass m (sum modulo 3 so far) as 0 f(i, m) = ((x + m)%3 == 0 and x%2 == 0) + f(i + 1, (m + x)%3) // Recursive
Запоминая состояния, мы получаем решение O (n).
Ниже приведена реализация этого подхода:
|
Джава
|
python3
|
C #
|
Выход:
5
Сложность времени: O (n).
Эта статья предоставлена Anuj Chauhan . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Количество подстрок, делимых на 4 в строке целых чисел
- Количество подстрок делится на 8, но не на 3
- Найти количество подстрок длины k, сумма ASCII-значений символов которых делится на k
- Количество подстрок строки
- Сумма всех подстрок строки, представляющей число | Комплект 1
- Количество подстрок одной строки в другой
- Количество четных подстрок в строке цифр
- Количество подстрок с нечетным десятичным значением в двоичной строке
- Повторите подстроки данной строки необходимое количество раз
- Подсчитать количество подстрок строки, состоящей из одинаковых символов
- Разбить двоичную строку на подстроки с равным числом 0 и 1
- Подсчитать количество гласных, встречающихся во всех подстроках данной строки
- Переставьте строку, чтобы максимизировать количество палиндромных подстрок
- Для заданной двоичной строки подсчитайте количество подстрок, которые начинаются и заканчиваются на 1.
- Минимальное количество подстрок, на которые можно разбить данную строку, удовлетворяющих заданным условиям
0.00 (0%) 0 votes