📌  相关文章
📜  M 次操作后的字典序最小字符串(1)

📅  最后修改于: 2023-12-03 15:32:46.438000             🧑  作者: Mango

M 次操作后的字典序最小字符串

有一个字符串,你可以对它进行 M 次操作,每次操作可以把任意一个字符移到字符串的开头。

求经过 M 次操作后,字典序最小的字符串是什么。

思路

我们希望尽可能将字典序大的字符往后面调整,从而使得整个字符串的字典序变小。因此我们可以从后往前遍历字符串,将当前字符往前调整,直到到达左端或是无法移动为止。这样遍历完整个字符串后,就能得到经过一次操作后的最小字典序字符串。

为了进行 M 次操作,我们可以重复执行上述操作,每次都保留之前操作后的字符串进行操作,直到进行了 M 次操作。

代码
def min_lexicographic_string(s: str, m: int) -> str:
    s_list = list(s)
    for i in range(m):
        for j in range(len(s_list) - 1, 0, -1):
            if s_list[j] < s_list[j - 1]:
                s_list[j], s_list[j - 1] = s_list[j - 1], s_list[j]
            else:
                break
    return ''.join(s_list)
示例
s = 'dcba'
m = 2
min_lexicographic_string(s, m)
# output: 'abdc'

以上就是本题的解法和代码实现,希望对大家有所帮助。