Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 알파벳에서 정수 매핑으로 문자열 해독


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