Преобразование последовательности мобильной цифровой клавиатуры в эквивалентное предложение
Дана строка S размера N , состоящая из цифр [0 – 9] и символа '.' , задача состоит в том, чтобы напечатать строку, которая может быть получена нажатием на клавиатуре мобильного телефона в заданной последовательности.
Примечание: '.' представляет собой перерыв во время набора текста.
Below is the image to represent the characters associated with each number in the keypad.
Примеры:
Input: S = “234”
Output: ADG
Explanation:
Pressing the keys 2, 3, and 4 once gives the resultant string as “ADG”.Input: S = “22.22”
Output: BB
Explanation:
Pressing the key 2 twice gives B, and then again pressing the key twice gives B. Therefore, the resultant string is “BB”.
Подход: Данную проблему можно решить, сохранив сопоставления мобильных клавиатур в массиве, а затем пройдя строку S и преобразовав ее в эквивалентную строку. Выполните следующие шаги, чтобы решить проблему:
- Инициализируйте пустую строку, скажем, ans , чтобы сохранить требуемый результат.
- Сохраните строку, связанную с каждой клавишей на мобильной клавиатуре, в массиве nums[] таким образом, что nums[i] представляет собой набор символов при нажатии цифры i .
- Пройдите по заданной строке S , используя переменную i , и выполните следующие шаги:
- Если S[i] равно '.' , затем увеличьте i на 1 и перейдите к следующей итерации.
- В противном случае инициализируйте переменную cnt как 0 , чтобы сохранить количество одинаковых символов.
- Повторяйте до тех пор, пока S[i] не станет равным S[i + 1] , и на каждой итерации проверяйте следующие условия:
- Если cnt равно 2, а S[i] равно 2, 3, 4, 5, 6 или 8, то выйти из цикла, потому что ключи: 2, 3, 4, 5, 6 и 8 содержат одно и то же число символов, т. е. 3.
- Если cnt равно 3, а S[i] равно 7 или 9, то выйти из цикла, поскольку ключи: 7 и 9 содержат одинаковое количество символов, то есть 4.
- Увеличьте значение cnt и i на 1.
- Если S[i] равно 7 или 9, добавьте к строке ans символ nums[str[i]][cnt%4] .
- В противном случае добавьте к строке ans символ nums[str[i]][cnt%3] .
- Увеличьте значение i на 1.
- После выполнения вышеуказанных шагов выведите строку значения и в качестве результата.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N)
Вспомогательное пространство: O(1)