숫자('0' - '9')와 '#'으로 구성된 문자열 s가 있다고 가정합니다. 다음과 같이 s를 하나의 영어 소문자에 매핑해야 합니다. -
-
문자('a' ~ 'i')는 각각 ('1' ~ '9')로 표시됩니다.
-
문자('j' ~ 'z')는 각각 ('10#' ~ '26#')로 표시됩니다.
매핑 후에 형성된 문자열을 찾아야 합니다. 우리는 고유한 매핑이 항상 존재한다는 한 가지 가정을 취합니다. 따라서 입력이 "10#11#12"와 같으면 "jkab"이 됩니다. 10#은 j, 11#은 k, 1은 a, 2는 b입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
모든 문자와 해당 ASCII 값을 포함하는 하나의 맵 생성
-
ans :=0 및 map[''] :='', ad i :=문자열 길이 – 1
-
i> 0
동안-
s[i]가 #이면
-
임시 :=“”
-
j :=i – 2 ~ i, temp :=temp + s[j]
-
ans :=map[temp] + ans
-
i를 3만큼 감소
-
-
그렇지 않으면 ans :=map[s[i]] + ans, i를 1만큼 감소
-
-
반환
예제(파이썬)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
class Solution(object):
def freqAlphabets(self, s):
m = {}
x = 'a'
for i in range(1, 27):
m[str(i)] = x
x = chr(ord(x) + 1)
ans = ""
m['']=''
i = len(s) - 1
while i >= 0:
if s[i] == "#":
temp = ""
for j in range(i - 2, i):
temp += s[j]
ans = m[str(temp)] + ans
i -= 3
else:
ans = m[s[i]] + ans
i -= 1
return ans
ob1 = Solution()
print(ob1.freqAlphabets("17#123#5621#")) 입력
"17#123#5621#"
출력
qawefu