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

ถอดรหัสสตริงจากการแมปตัวอักษรเป็นจำนวนเต็มใน Python


สมมติว่าเรามีสตริงที่ประกอบด้วยตัวเลข ('0' - '9') และ '#' เราต้องแมป 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 :=length of string – 1

  • ในขณะที่ฉัน> 0

    • ถ้า s[i] เป็น # แล้ว

      • อุณหภูมิ :=“”

      • สำหรับ j :=i – 2 ถึง i, temp :=temp + s[j]

      • ans :=map[ชั่วคราว] + ans

      • ลดลง 3

    • มิฉะนั้น ans :=map[s[i]] + ans และลดลง i 1

  • กลับมาอีกครั้ง

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

อินพุต

"17#123#5621#"

ผลลัพธ์

qawefu