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

ค้นหาสตริงทั้งหมดที่เกิดขึ้นจากอักขระที่แมปกับตัวเลขใน Python


สมมติว่าเรามีการแมปอักขระดังนี้ ที่นี่แต่ละหลัก ตั้งแต่ 1 ถึง 9 จับคู่กับอักขระไม่กี่ตัว

1 -> ['A', 'B', 'C']
2 -> ['D', 'E', 'F']
3 -> ['G', 'H', 'I']
4 -> ['J', 'K', 'L']
5 -> ['M', 'N', 'O']
6 -> ['P', 'Q', 'R']
7 -> ['S', 'T', 'U']
8 -> ['V', 'W', 'X']
9 -> ['Y', 'Z']

ถ้าเรามีตัวเลข เราต้องเปลี่ยนตัวเลขด้วยอักขระที่เกี่ยวข้องในรายการแผนที่ที่กำหนด และแสดงสตริงที่สร้างขึ้นทั้งหมด เราควรพิจารณาอักขระตัวเดียวกันทุกครั้งที่เกิดตัวเลขในตัวเลข ตัวเลขที่ระบุจะไม่มี 0

ดังนั้นหากอินพุตเป็น [4,3,5] เอาต์พุตจะเป็น

JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO

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

  • ออก :=รายการใหม่
  • temp :=รายการใหม่
  • char_map :=แผนที่ใหม่
  • ดัชนี :=0
  • สำหรับแต่ละหลักใน inp ทำ
    • ถ้าตัวเลขไม่อยู่ใน char_map แล้ว
      • char_map[ตัวเลข] :=ดัชนี
    • ล้างรายการชั่วคราว
    • สำหรับฉันในช่วง 0 ถึงขนาดของตาราง[หลัก - 1] ทำ
      • ถ้าดัชนีเท่ากับ 0 แล้ว
        • s :=table[ตัวเลข - 1, i]
        • แทรก s ที่ส่วนท้ายของออก
      • ถ้าดัชนี> 0 คือ
        • สำหรับแต่ละสตริงเข้าออก ทำ
          • s :=table[ตัวเลข - 1, i]
            • หาก char_map[ตัวเลข] ไม่เหมือนกับดัชนี
              • s :=string[char_map[digit]]
            • string :=string concatenate s
            • ใส่สตริงที่ส่วนท้ายของอุณหภูมิ
        • หาก char_map[ตัวเลข] ไม่เหมือนกับดัชนี
          • แตก
      • ถ้าดัชนี> 0 แล้ว
        • ออก :=สำเนาชั่วคราว
      • ดัชนี :=ดัชนี + 1
    • คืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def findCombinations(inp, table):
   out = list()
   temp = list()
   char_map = dict()
   index = 0
   for digit in inp:
      if digit not in char_map:
         char_map[digit] = index
      temp.clear()
      for i in range(len(table[digit - 1])):
         if index == 0:
            s = table[digit - 1][i]
            out.append(s)
         if index > 0:
            for string in out:
               s = table[digit - 1][i]
               if char_map[digit] != index:
                  s = string[char_map[digit]]
               string = string + s
               temp.append(string)
            if char_map[digit] != index:
               break
      if index > 0:
         out = temp.copy()
      index += 1
   return out
mapping = [['A', 'B', 'C'],
         ['D', 'E', 'F'],
         ['G', 'H', 'I'],
         ['J', 'K', 'L'],
         ['M', 'N', 'O'],
         ['P', 'Q', 'R'],
         ['S', 'T', 'U'],
         ['V', 'W', 'X'],
         ['Y', 'Z']]
inp = [4,3,5]
res = findCombinations(inp, mapping)
for it in res:
   print(it, end=" ")

อินพุต

[4,3,5]

ผลลัพธ์

JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO