Computer >> Máy Tính >  >> Lập trình >> Python

Giải mã chuỗi từ bảng chữ cái thành ánh xạ số nguyên bằng Python


Giả sử chúng ta có một chuỗi s được tạo thành bởi các chữ số ('0' - '9') và '#'. Chúng ta phải ánh xạ các s thành một ký tự viết thường tiếng Anh như sau -

  • Các ký tự ('a' đến 'i') được đại diện bởi ('1' đến '9') tương ứng.

  • Các ký tự ('j' đến 'z') lần lượt được đại diện bởi ('10 # 'đến '26 #').

Chúng ta phải tìm chuỗi được hình thành sau khi ánh xạ. Chúng tôi đang có một giả định rằng một ánh xạ duy nhất sẽ luôn tồn tại. Vì vậy, nếu đầu vào giống như "10 # 11 # 12", thì nó sẽ là "jkab". Vì 10 # là j, 11 # là k, 1 là a và 2 là b.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • tạo một bản đồ để lưu giữ tất cả các ký tự và các giá trị ASCII tương ứng của chúng

  • ans:=0 và map [‘’]:=‘’, ad i:=length of string - 1

  • trong khi tôi> 0

    • nếu s [i] là # thì

      • tạm thời:=“”

      • for j:=i - 2 to i, temp:=temp + s [j]

      • ans:=map [temp] + ans

      • giảm i đi 3

    • nếu không thì ans:=map [s [i]] + ans và giảm i đi 1

  • trả lại ans

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

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#"))

Đầu vào

"17#123#5621#"

Đầu ra

qawefu