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

Chương trình Python để chia chuỗi thành k phân vùng riêng biệt

Giả sử chúng ta có một chuỗi s và và một giá trị k. Giá trị của k là hệ số của độ dài s, giả sử độ dài là n. Chúng ta có thể chia s thành n / k chuỗi con khác nhau gọi là t_i có kích thước k. Sau đó, sử dụng các t_i này để làm cho u_i trở nên như vậy

  • Các ký tự có trong u_i là dãy con của các ký tự trong t_i

  • Mọi ký tự lặp lại sẽ bị xóa khỏi chuỗi này sao cho tần suất của mỗi ký tự trong u_i là 1

Chúng tôi phải tìm các chuỗi u_i này

Vì vậy, nếu đầu vào là s =​​"MMPQMMMRM" k =3, thì đầu ra sẽ là ["MP", "QM", "MR"] vì kích thước của s là 9 và k là 3, vì vậy 9 / 3 =3. Các chuỗi là MMP, QMM và MRM, nhưng vì chúng tôi không hỗ trợ các ký tự trùng lặp nên chúng sẽ là MP, QM và MR.

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

  • i:=0
  • ret:=một danh sách mới
  • mp:=một bản đồ mới
  • to_print:=chuỗi trống
  • while i
  • nếu tôi mod k giống 0 và tôi khác 0, thì
    • chèn to_print vào cuối ret
    • xóa mp và xóa to_print
  • nếu s [i] không có trong mp, thì
    • mp [s [i]]:=0
    • to_print:=to_print + s [i]
  • i:=i + 1
  • chèn to_print vào cuối ret
  • trả lời lại
  • 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, k):
       i = 0
       ret = []
       mp, to_print = {}, ""
       while i < len(s):
          if i % k == 0 and i != 0:
             ret.append(to_print)
             mp, to_print = {}, ""
          if s[i] not in mp.keys():
             mp[s[i]] = 0
             to_print += s[i]
          i += 1
       ret.append(to_print)
       return ret
    
    s = "MMPQMMMRM"
    k = 3
    print(solve(s, k))

    Đầu vào

    "MMPQMMMRM", 3
    

    Đầu ra

    ['MP', 'QM', 'MR']