Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm tổng số ký tự cần thay đổi để sửa một từ sai chính tả trong Python

Giả sử chúng ta được cung cấp một danh sách các thành phố và danh sách các con đường kết nối với nhau. Danh sách 'thành phố' chứa tên các thành phố mà xe buýt du lịch ghé thăm theo thứ tự. Trong danh sách 'đường', các con đường được liệt kê theo thứ tự (nguồn, đích) nghĩa là có một con đường một chiều từ nguồn đến đích. Bây giờ, có một vấn đề là một số tên thành phố trong danh sách 'thành phố' có thể bị sai chính tả. Chúng tôi phải sửa những tên thành phố sai chính tả như vậy bằng cách thay đổi số ký tự tối thiểu. Chúng tôi trả về số ký tự đã thay đổi dưới dạng đầu ra.

Vì vậy, nếu đầu vào giống như thành phố =["HWH", "DLI", "BGL"], đường =[["HWH", "DLI"], ["DLI", "BCT"], ["BCT" , "HWH"]], thì đầu ra sẽ là 2.

Tên thành phố sai chính tả ở các thành phố là 'BGL'. Tên chính xác sẽ là 'BCT'. Vì vậy, quá chính xác tên ở các thành phố, chúng ta phải thay đổi 2 ký tự.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm diff (). Điều này sẽ mất a, b
    • trả về tổng số chênh lệch về các ký tự giữa a và b
  • size:=kích thước của các thành phố
  • arr:=một bản đồ mới
  • junctions:=một tập hợp mới từ mỗi thành phố nguồn trên các con đường
  • đối với mỗi j trong các đoạn nối, hãy thực hiện
    • arr [j]:=diff (thành phố [0], j)
  • đối với tôi trong phạm vi từ 1 đến kích thước, hãy thực hiện
    • nxt:=một bản đồ mới
    • đối với mỗi r1, r2 trên đường, thực hiện
      • nếu r1 hiện trong arr, thì
        • chi phí:=arr [r1] + diff (thành phố [i], r2)
        • nếu r2 không có trong nxt hoặc giá
        • nxt [r2]:=chi phí
  • arr:=nxt
  • trả về giá trị tối thiểu trong tất cả các giá trị trong arr
  • Ví dụ

    Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

     def diff (a, b):return sum (x! =y cho x, y trong zip (a, b)) def giải (thành phố, đường):size =len (thành phố) arr =dict () junctions =set (r [0] cho r trong các con đường) cho j trong các đường giao nhau:arr [j] =diff (thành phố [0], j) cho i trong phạm vi (1, kích thước):nxt =dict () cho r1, r2 ở đường:nếu r1 ở arr:cost =arr [r1] + diff (thành phố [i], r2) nếu r2 không thuộc nxt hoặc cost  

    Đầu vào

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

    Đầu ra

     2