Python 程式將字串拆分為 k 個不同的分割槽


假設我們有一個字串 s 和一個值 k。k 的值是 s 長度的因子,假設長度為 n。我們可以將 s 拆分為 n/k 個不同的子字串,稱為大小為 k 的 t_i。然後使用這些 t_i 生成 u_i,使得

  • u_i 中存在的字元是 t_i 中字元的子序列

  • 從這些字串中刪除任何重複的字元,使得 u_i 中每個字元的頻率為 1

我們必須找到這些 u_i 字串

因此,如果輸入類似於 s = "MMPQMMMRM" k = 3,則輸出將為 ["MP", "QM", "MR"],因為 s 的大小為 9,k 為 3,所以 9/3 = 3。字串為 MMP、QMM 和 MRM,但由於我們不支援重複字元,因此它們將為 MP、QM 和 MR。

為了解決這個問題,我們將遵循以下步驟:

  • i := 0
  • ret := 一個新的列表
  • mp := 一個新的對映
  • to_print := 空字串
  • 當 i < s 的大小時,執行以下操作:
    • 如果 i mod k 與 0 相同,並且 i 不為 0,則
      • 將 to_print 插入 ret 的末尾
      • 清空 mp 和 to_print
    • 如果 s[i] 不存在於 mp 中,則
      • mp[s[i]] := 0
      • to_print := to_print + s[i]
    • i := i + 1
  • 將 to_print 插入 ret 的末尾
  • 返回 ret

示例

讓我們看看以下實現以更好地理解

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))

輸入

"MMPQMMMRM", 3

輸出

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

更新於: 2021年10月12日

482 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.