숫자('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