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

Chương trình tìm kích thước của từng phân vùng trong danh sách mà mỗi chữ cái xuất hiện nhiều nhất là một phần bằng Python

Giả sử chúng ta có một chuỗi chữ thường s, chúng ta có thể phân chia s thành nhiều phần nhất có thể sao cho mỗi chữ cái xuất hiện trong nhiều nhất một phần và tìm kích thước của các phân vùng dưới dạng danh sách.

Vì vậy, nếu đầu vào là s =​​"momoplaykae", thì đầu ra sẽ là [4, 1, 1, 4, 1], vì chuỗi được chia thành ["momo", "p", "l", " ayka "," e "].

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

  • count:=một bản đồ chứa các ký tự trong s và số lần xuất hiện của chúng

  • out:=một danh sách mới, stk:=một ngăn xếp trống

  • chiều dài:=0

  • đối với mỗi ký tự trong s, thực hiện

    • count [char]:=count [char] - 1

    • length:=length + 1

    • trong khi số [char] không giống 0 hoặc stk không trống, hãy làm

      • nếu số lượng [char] không giống 0, thì

        • đẩy char vào stk

        • đi ra từ vòng lặp

      • nếu stk không trống và số lượng [top of stk] bằng 0 thì

        • bật ra từ stk

      • nếu không,

        • đi ra từ vòng lặp

    • nếu stk trống và số lượng [char] bằng 0, thì

      • chèn độ dài sau khi ra

      • chiều dài:=0

  • trả lại

Ví dụ

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

from collections import Counter
class Solution:
   def solve(self, s):
      count = Counter(s)
      out = []
      stk = []
      length = 0
      for char in s:
         count[char] -= 1
         length += 1
         while count[char] != 0 or stk:
            if count[char] != 0:
               stk.append(char)
               break
            if stk and count[stk[-1]] == 0:
               stk.pop()
            else:
               break
            if not stk and count[char] == 0:
               out += [length]
               length = 0
         return out
ob = Solution()
s = "momoplaykae"
print(ob.solve(s))

Đầu vào

"momoplaykae"

Đầu ra

[4, 1, 1, 4, 1]