1309. Decrypt String from Alphabet to Integer Mapping
You are given a string s formed by digits and '#'. We want to map s to English lowercase characters as follows:
- Characters ('a' to 'i') are represented by ('1' to '9') respectively.
- Characters ('j' to 'z') are represented by ('10#' to '26#') respectively.
Return the string formed after mapping.
The test cases are generated so that a unique mapping will always exist.
Example 1:
Input: s = "10#11#12"
Output: "jkab"
Explanation: "j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2".
Example 2:
Input: s = "1326#"
Output: "acz"
Constraints:
- 1 <= s.length <= 1000
- s consists of digits and the '#' letter.
- s will be a valid string such that mapping is always possible.
From: LeetCode
Link: 1309. Decrypt String from Alphabet to Integer Mapping
Solution:
Ideas:
Scan from left to right; when the character two positions ahead is '#', decode two digits, otherwise decode one digit.
Code:
c
#include <stdlib.h>
#include <string.h>
char* freqAlphabets(char* s) {
int n = strlen(s);
char* result = (char*)malloc((n + 1) * sizeof(char));
int i = 0;
int index = 0;
while (i < n) {
int value;
if (i + 2 < n && s[i + 2] == '#') {
value = (s[i] - '0') * 10 + (s[i + 1] - '0');
i += 3;
} else {
value = s[i] - '0';
i++;
}
result[index++] = 'a' + value - 1;
}
result[index] = '\0';
return result;
}