Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Giải mã chuỗi từ ánh xạ Alphabet-Integer trong Python

Giả sử chuỗi s được tạo từ chữ số ('0'-'9') và '#'. Ta ánh xạ s sang chữ thường tiếng Anh như sau:

  • Ký tự ('a' đến 'i') biểu diễn bằng ('1' đến '9') tương ứng.
  • Ký tự ('j' đến 'z') biểu diễn bằng ('10#' đến '26#') tương ứng.

Tìm chuỗi sau khi ánh xạ. Giả định ánh xạ duy nhất luôn tồn tại. Ví dụ input "10#11#12" → "jkab" (10#=j, 11#=k, 1=a, 2=b).

Giải pháp:

  • Tạo map chứa ký tự và giá trị ASCII tương ứng
  • ans := "", map[''] := '', i := len(string) - 1
  • while i ≥ 0
    • nếu s[i] == '#', thì
      • temp := ""
      • for j := i-2 đến i-1, temp += s[j]
      • ans := map[str(temp)] + ans
      • i -= 3
    • ngược lại ans := map[s[i]] + ans, i -= 1
  • trả về ans

Ví dụ (Python)

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

Input

"17#123#5621#"

Output

qawefu