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

Chương trình tìm điểm số tối đa mà chúng ta có thể nhận được bằng cách xóa 10 hoặc 01 khỏi chuỗi nhị phân trong Python

Giả sử chúng ta có một chuỗi nhị phân s và hai giá trị zero_one và one_zero. Bây giờ chúng ta hãy xem xét một hoạt động mà chúng ta có thể xóa bất kỳ chuỗi con "01" nào và nhận điểm zero_one. Hoặc chúng tôi có thể loại bỏ bất kỳ chuỗi con "10" nào và nhận điểm one_zero. Chúng tôi phải tìm số điểm tối đa mà chúng tôi có thể nhận được sau bất kỳ số hoạt động nào.

Vì vậy, nếu đầu vào là s =​​"10100101" zero_one =3 one_zero =2, thì đầu ra sẽ là 11, vì chúng ta có thể loại bỏ "01" ba lần để được 3 * 3 =9 điểm. Khi đó chuỗi còn lại là 10. Bằng cách loại bỏ chuỗi này, chúng ta có thể nhận được 2 điểm khác nên tổng là 11.

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

  • A:=danh sách các bit được cung cấp dưới dạng chuỗi đầu vào

  • nếu zero_one

    • hoán đổi zero_one và one_zero

    • đối với tôi trong phạm vi từ 0 đến kích thước của A, hãy thực hiện

      • A [i]:=A [i] XOR 1

  • ans:=0

  • stack:=một ngăn xếp mới

  • đối với mỗi x trong A, thực hiện

    • nếu ngăn xếp không trống và phần tử trên cùng của ngăn xếp

      • bật ra từ ngăn xếp

      • ans:=ans + zero_one

    • nếu không,

      • đẩy x vào ngăn xếp

  • ans:=ans + one_zero * tối thiểu xuất hiện 0 trong ngăn xếp và xuất hiện 1 trong ngăn xếp

  • trả lại ans

Ví dụ (Python)

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

 class Giải pháp:def giải (self, S, zero_one, one_zero):A =list (map (int, S)) if zero_one  

Đầu vào

 "10100101", 3, 2 

Đầu ra

 11