Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ถอดรหัสสตริงจากการแมปอักษรอังกฤษเป็นตัวเลข (Decrypt String from Alphabet to Integer Mapping) ใน Python

สมมติว่าเรามีสตริง s ที่ประกอบด้วยตัวเลข ('0' - '9') และ '#' เราต้องแมป s ไปยังตัวอักษรภาษาอังกฤษพิมพ์เล็กดังนี้:

  • ตัวอักษร ('a' ถึง 'i') แทนด้วย ('1' ถึง '9') ตามลำดับ
  • ตัวอักษร ('j' ถึง 'z') แทนด้วย ('10#' ถึง '26#') ตามลำดับ

เราต้องหาสตริงที่ได้หลังการแมป สมมติว่าการแมปที่ไม่ซ้ำกันจะมีอยู่เสมอ ดังนั้นถ้าอินพุตเป็น "10#11#12" ผลลัพธ์จะเป็น "jkab" เพราะ 10# คือ j, 11# คือ k, 1 คือ a และ 2 คือ b

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • สร้าง map หนึ่งเพื่อเก็บตัวอักษรทั้งหมดและค่า ASCII ที่สอดคล้อง
  • ans := 0, และ map[''] := '', และ i := ความยาวของสตริง - 1
  • while i >= 0
    • ถ้า s[i] เป็น # แล้ว
      • temp := ""
      • for j := i - 2 ถึง i, temp := temp + s[j]
      • ans := map[temp] + ans
      • ลด i ลง 3
    • มิฉะนั้น ans := map[s[i]] + ans, และลด i ลง 1
  • คืนค่า ans

ตัวอย่าง (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