将字符串分成 k 个不同的子串的 Python 程序
假设我们有一个字符串 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,则
- 在 ret 的末尾插入 to_print
- 清除 mp 和清除 to_print
- 如果 s [i] 不在 mp 中,则
- mp [s [i]]:= 0
- to_print:= to_print + s [i]
- i:= i +1
- 如果 i mod k 与 0 相同且 i 不为 0,则
- 在 ret 的末尾插入 to_print
- 返回 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']