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

โปรแกรมหาจำนวนอักขระทั้งหมดที่จะเปลี่ยนเพื่อแก้ไขคำที่สะกดผิดใน Python


สมมติว่าเราได้รับรายชื่อเมืองและรายชื่อถนนที่เชื่อมถึงกัน รายชื่อ 'เมือง' ประกอบด้วยชื่อเมืองที่รถทัวร์เข้าเยี่ยมชมตามลำดับ ในรายการ 'ถนน' ถนนจะเรียงตามลำดับ (ต้นทาง, ปลายทาง) ซึ่งหมายความว่ามีถนนเดินรถทางเดียวจากต้นทางไปยังปลายทาง ขณะนี้ มีปัญหาที่ชื่อเมืองบางชื่อใน 'เมือง' ในรายการอาจถูกสะกดผิด เราต้องแก้ไขชื่อเมืองที่สะกดผิดโดยเปลี่ยนจำนวนอักขระขั้นต่ำ เราคืนค่าจำนวนอักขระที่เปลี่ยนเป็นเอาต์พุต

ดังนั้น หากอินพุตเป็นเหมือนเมือง =["HWH", "DLI", "BGL"], roads =[["HWH", "DLI"],["DLI", "BCT"], ["BCT" , "HWH"]] แล้วผลลัพธ์จะเป็น 2

ชื่อเมืองที่สะกดผิดในเมืองคือ 'BGL' ชื่อที่ถูกต้องคือ 'BCT' ดังนั้น แก้ไขชื่อในเมืองด้วย เราต้องเปลี่ยนอักขระ 2 ตัว

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

  • กำหนดฟังก์ชัน diff() นี่จะใช้เวลา a, b
    • ส่งคืนผลต่างทั้งหมดในอักขระระหว่าง a และ b
  • ขนาด :=ขนาดของเมือง
  • arr :=แผนที่ใหม่
  • ทางแยก :=ชุดใหม่จากแต่ละเมืองต้นทางในถนน
  • สำหรับแต่ละ j ในทางแยก ให้ทำ
    • arr[j] :=diff(cities[0], j)
  • สำหรับผมในช่วง 1 ถึงขนาด ทำ
    • nxt :=แผนที่ใหม่
    • สำหรับแต่ละ r1, r2 ในถนน ทำ
      • ถ้า r1 อยู่ใน arr แล้ว
        • ราคา :=arr[r1] + diff(cities[i], r2)
        • ถ้า r2 ไม่มีอยู่ใน nxt หรือ cost
        • nxt[r2] :=ราคา
  • arr :=nxt
  • คืนค่าต่ำสุดของค่าทั้งหมดใน arr
  • ตัวอย่าง

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

    def diff(a, b):return sum(x !=y for x, y in zip(a, b))def Solving(cities, roads):size =len(cities) arr =dict() ทางแยก =set(r[0] สำหรับ r ในถนน) สำหรับ j ทางแยก:arr[j] =diff(cities[0], j) สำหรับผม ในช่วง (1, ขนาด):nxt =dict() สำหรับ r1, r2 ในถนน:ถ้า r1 ใน arr:cost =arr[r1] + diff(cities[i], r2) ถ้า r2 ไม่ได้อยู่ใน nxt หรือ cost  

    อินพุต

    ["HWH", "DLI", "BGL"], [["HWH", "DLI"],["DLI", "BCT"], ["BCT","HWH"]] 

    ผลลัพธ์

    2