1309. Decrypt String from Alphabet to Integer Mapping

QUESTION:

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.

EXPLANATION:

这个其实有一个非常取巧的思路, 因为正向的话, 我们需要去查看后面两位是否有#, 但是如果是反向的话, 那么#就在前面. 最后再将结果返回来就可以了.

SOLUTION:

class Solution {
    var alphabeta:[String] = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",
                                        "o","p","q","r","s","t","u","v","w","x","y","z"]
    var alphabetaRepresent:[String] = ["1","2","3","4","5","6","7","8","9","#01","#11","#21","#31","#41","#51","#61","#71","#81","#91","#02",
                                            "#12","#22","#32","#42","#52","#62"]
    func freqAlphabets(_ s: String) -> String {
        var text:[Character] = s.reversed()
        var index:Int = 0
        var result:String = ""
        while index < text.count {
            var tmp:String = ""
            tmp += text[index].description
            index += 1
            if tmp == "#" {
                tmp += text[index].description
                tmp += text[index+1].description
                index += 2
            }
            result += alphabeta[alphabetaRepresent.index(of: tmp)!]
        }
        return String(result.reversed())
    }
}