Преобразование последовательности мобильной цифровой клавиатуры в эквивалентное предложение

Опубликовано: 19 Сентября, 2022

Дана строка 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)