LeetCode-in-Java

1309. Decrypt String from Alphabet to Integer Mapping

Easy

You are given a string s formed by digits and '#'. We want to map s to English lowercase characters as follows:

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:

Solution

public class Solution {
    public String freqAlphabets(String s) {
        StringBuilder builder = new StringBuilder();
        int i = s.length() - 1;
        while (i >= 0) {
            if (s.charAt(i) == '#') {
                decryptor(builder, i - 1, i - 2, s);
                i -= 3;
            } else {
                char ch = (char) (s.charAt(i) - '0' + 96);
                builder.append(ch);
                i--;
            }
        }
        return builder.reverse().toString();
    }

    private void decryptor(StringBuilder builder, int a, int b, String s) {
        builder.append((char) (((s.charAt(b) - '0') * 10 + s.charAt(a) - '0') + 96));
    }
}