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

Chương trình tìm độ dài tối thiểu của chuỗi sau khi xóa các kết thúc tương tự trong Python

Giả sử chúng ta có một chuỗi s chỉ có ba ký tự 'a', 'b' và 'c'. Chúng tôi sẽ áp dụng thuật toán sau trên chuỗi bất kỳ số lần nào -

  • Chọn một tiền tố không trống từ các s mà tất cả các ký tự trong tiền tố đều giống nhau.

  • Chọn một hậu tố không trống từ các s mà tất cả các ký tự trong hậu tố đều giống nhau.

  • Tiền tố và hậu tố không tách rời nhau.

  • Các ký tự từ tiền tố và hậu tố phải giống nhau.

  • Xóa cả tiền tố và hậu tố khỏi s.

Cuối cùng, chúng ta phải tìm độ dài tối thiểu của s sau khi thực hiện thao tác trên bất kỳ số lần nào (có thể là 0 lần).

Vì vậy, nếu đầu vào là s =​​"aabccabba", thì đầu ra sẽ là 3 vì lúc đầu chúng ta có thể chọn tiền tố ="aa" và hậu tố ="a", để chuỗi sau khi loại bỏ là "bccabb", sau đó chọn tiền tố ="b" và hậu tố "bb", vì vậy chuỗi sau khi xóa là "cca", có độ dài 3.

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

  • s:=tạo hàng đợi với s

  • trong khi kích thước của s> 1 và s [0] là phần tử cuối cùng của s, do

    • chk:=s [0]

    • trong khi s và s [0] giống nhau, hãy làm

      • xóa phần tử bên trái khỏi s

    • trong khi s không trống và phần tử cuối cùng của s giống với chk, do

      • xóa phần tử cuối cùng khỏi s

  • kích thước trả về của s

Ví dụ

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

from collections import deque
def solve(s):
   s = deque(s)
   while len(s) > 1 and s[0] == s[-1]:
      chk = s[0]
      while s and s[0] == chk:
         s.popleft()
      while s and s[-1] == chk:
         s.pop()
   return len(s)

s = "aabccabba"
print(solve(s))

Đầu vào

"aabccabba"

Đầu ra

3