LeetCode: Decrypt String from Alphabet to Integer Mapping
Question
Given a string s formed by digits (‘0’ - ‘9’) 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.
It’s guaranteed that a unique mapping will always exist.
Solution#1
def freq_alphabets(s)
dict = {}
ans = []
counter = 1
length = s.length-1
j = length
('a'..'z').each do |i|
if counter < 10
dict["#{counter}"] = i
else
dict["#{counter}#"] = i
end
counter += 1
end
while j >= 0
if s[j] == "#"
ans << dict[s[j-2..j]]
j -= 2
else
ans << dict[s[j]]
end
j -= 1
end
ans.reverse.join
end
Solution#2
def freq_alphabets(s)
tmp = decrypt(s, /(\d{2}#)/)
decrypt(tmp, /(\d)/)
end
def decrypt(string, pattern)
string.gsub(pattern) do |x|
($1.to_i + 96).chr
end
end
Comments