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

Chương trình tìm chi phí xóa tối thiểu để tránh lặp lại các chữ cái trong Python

Giả sử chúng ta có một chuỗi s và một mảng số nguyên khác được gọi là cost trong đó cost [i] đại diện cho chi phí xóa ký tự thứ i trong s. Chúng ta phải tìm chi phí xóa tối thiểu sao cho không có hai chữ cái giống nhau bên cạnh nhau. Chúng tôi phải ghi nhớ rằng chúng tôi sẽ xóa các ký tự đã chọn cùng một lúc. Vì vậy, sau khi xóa một ký tự, chi phí xóa các ký tự khác sẽ không thay đổi.

Vì vậy, nếu đầu vào là s =​​"pptpp", cost =[2,3,4,5,2], thì đầu ra sẽ là 4 vì nếu chúng ta loại bỏ p đầu tiên và cuối cùng với chi phí 2 + 2 =4, thì chuỗi sẽ là "ptp" ở đây không có hai ký tự giống nhau nào xuất hiện lần lượt

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

  • cost_f:=0
  • i:=1
  • ind:=0
  • đối với tôi trong phạm vi từ 1 đến kích thước của s-1, hãy thực hiện
    • cur:=s [i], c_cost:=cost [i]
    • before:=s [i-1], p_cost:=cost [i-1]
    • nếu ind giống 1, thì
      • prev:=pres_i, p_cost:=cost_i
    • nếu cur giống như trước, thì
      • if c_cost> =p_cost, then
        • cost_f:=cost_f + p_cost
        • pres_i:=0, cost_i:=0
        • ind:=0
      • nếu c_cost
      • cost_f:=cost_f + c_cost
      • ind:=1
      • pres_i:=trước, cost_i:=p_cost
  • nếu không,
    • pres_i:=0, cost_i:=0
    • ind:=0
  • return cost_f
  • Ví dụ

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

    def solve(s, cost):
       cost_f = 0
       i = 1
       ind = 0
    
       for i in range(1, len(s)):
          cur, c_cost = s[i], cost[i]
          prev, p_cost = s[i-1], cost[i-1]
          if ind == 1:
             prev, p_cost = prev_i, cost_i
    
          if cur == prev:
             if c_cost >= p_cost:
                cost_f += p_cost
                prev_i, cost_i = 0,0
                ind = 0
    
             if c_cost < p_cost:
                cost_f += c_cost
                ind = 1
                prev_i, cost_i = prev, p_cost
    
          else:
             prev_i, cost_i = 0,0
             ind = 0
       return cost_f
    
    s = "pptpp"
    cost = [2,3,4,5,2]
    print(solve(s, cost))

    Đầu vào

    "pptpp", [2,3,4,5,2]

    Đầu ra

    4