สมมติว่าเราได้รับรายชื่อเมืองและรายชื่อถนนที่เชื่อมถึงกัน รายชื่อ 'เมือง' ประกอบด้วยชื่อเมืองที่รถทัวร์เข้าเยี่ยมชมตามลำดับ ในรายการ 'ถนน' ถนนจะเรียงตามลำดับ (ต้นทาง, ปลายทาง) ซึ่งหมายความว่ามีถนนเดินรถทางเดียวจากต้นทางไปยังปลายทาง ขณะนี้ มีปัญหาที่ชื่อเมืองบางชื่อใน 'เมือง' ในรายการอาจถูกสะกดผิด เราต้องแก้ไขชื่อเมืองที่สะกดผิดโดยเปลี่ยนจำนวนอักขระขั้นต่ำ เราคืนค่าจำนวนอักขระที่เปลี่ยนเป็นเอาต์พุต
ดังนั้น หากอินพุตเป็นเหมือนเมือง =["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] :=ราคา
- ถ้า r1 อยู่ใน arr แล้ว
- arr :=nxt
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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