สมมติว่าเรามีสตริงที่ประกอบด้วยตัวเลข ('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