Replace All Digits with Characters
LeetCode 1954 | Difficulty: Easyβ
EasyProblem Descriptionβ
You are given a 0-indexed string s that has lowercase English letters in its even indices and digits in its odd indices.
You must perform an operation shift(c, x), where c is a character and x is a digit, that returns the x^th character after c.
- For example, `shift('a', 5) = 'f'` and `shift('x', 0) = 'x'`.
For every odd index i, you want to replace the digit s[i] with the result of the shift(s[i-1], s[i]) operation.
Return s* after replacing all digits. It is guaranteed that shift(s[i-1], s[i]) will never exceed *'z'.
Note that shift(c, x) is not a preloaded function, but an operation to be implemented as part of the solution.
Example 1:
Input: s = "a1c1e1"
Output: "abcdef"
Explanation: The digits are replaced as follows:
- s[1] -> shift('a',1) = 'b'
- s[3] -> shift('c',1) = 'd'
- s[5] -> shift('e',1) = 'f'
Example 2:
Input: s = "a1b2c3d4e"
Output: "abbdcfdhe"
Explanation: The digits are replaced as follows:
- s[1] -> shift('a',1) = 'b'
- s[3] -> shift('b',2) = 'd'
- s[5] -> shift('c',3) = 'f'
- s[7] -> shift('d',4) = 'h'
Constraints:
- `1 <= s.length <= 100`
- `s` consists only of lowercase English letters and digits.
- `shift(s[i-1], s[i]) <= 'z'` for all **odd** indices `i`.
Topics: String
Approachβ
String Processingβ
Consider character frequency counts, two-pointer approaches, or building strings efficiently. For pattern matching, think about KMP or rolling hash. For palindromes, expand from center or use DP.
Anagram detection, palindrome checking, string transformation, pattern matching.
Solutionsβ
Solution 1: C# (Best: 101 ms)β
| Metric | Value |
|---|---|
| Runtime | 101 ms |
| Memory | 35.6 MB |
| Date | 2022-02-02 |
public class Solution {
public string ReplaceDigits(string s) {
int n = s.Length;
char[] result = new char[n];
int i = 0;
while(i<n)
{
if(!char.IsDigit(s[i])) result[i] = s[i];
else
{
result[i] = (char)(s[i-1]+(s[i]-'0'));
}
i++;
}
return new string(result);
}
}
Complexity Analysisβ
| Approach | Time | Space |
|---|---|---|
| Solution | $O(n)$ | $O(1) to O(n)$ |
Interview Tipsβ
- Start by clarifying edge cases: empty input, single element, all duplicates.
- LeetCode provides 2 hint(s) for this problem β try solving without them first.
π‘ Hints
Hint 1: We just need to replace every even positioned character with the character s[i] positions ahead of the character preceding it
Hint 2: Get the position of the preceeding character in alphabet then advance it s[i] positions and get the character at that position