Easy
You are given a string s
formed by digits and '#'
. We want to map s
to English lowercase characters as follows:
'a'
to 'i')
are represented by ('1'
to '9'
) respectively.'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.class Solution {
fun freqAlphabets(s: String): String {
val builder = StringBuilder()
var i = s.length - 1
while (i >= 0) {
if (s[i] == '#') {
decryptor(builder, i - 1, i - 2, s)
i -= 3
} else {
val ch = (s[i].code - '0'.code + 96).toChar()
builder.append(ch)
i--
}
}
return builder.reverse().toString()
}
private fun decryptor(builder: StringBuilder, a: Int, b: Int, s: String) {
builder.append((((s[b].code - '0'.code) * 10 + s[a].code - '0'.code) + 96).toChar())
}
}