📅  最后修改于: 2023-12-03 15:25:02.487000             🧑  作者: Mango
要求:找出一个字典中最小的字符串,使得它在恰好 K 个索引处与给定的字符串不同。
给定一个字符串 S,以及一个正整数 K。(1 <= K <= len(S) <= 5000)
输出字典顺序最小的字符串,如果不存在这样的字符串,返回 -1。
S = "leetcode"
K = 3
"aaagffff"
在 leetcode 这个字符串中,与它恰好在 3 个索引处不同的最小字符串为 "aaagffff"。
首先,字典顺序最小的字符串一定要尽可能多的使用字典序靠前的字符,即尽可能多地使用 'a'。
其次,对于 K 个位置不同的字符串,我们可以先将其全部替换成 'a',然后从右往左遍历字符串,找到第一个字符能替换的位置,将该位置字符减一,然后将该位置之后的字符全部替换成 'a'。
def get_min_string(S: str, K: int) -> str:
s_list = list(S)
for i in range(len(s_list)):
if K == 0:
break
if s_list[i] != 'a':
s_list[i] = 'a'
K -= 1
if K == 0:
return ''.join(s_list)
for i in range(len(s_list) - 1, -1, -1):
if K == 0:
break
if s_list[i] != 'a':
s_list[i] = chr(ord(s_list[i]) - 1)
K -= 1
if K > 0:
return "-1"
j = len(s_list) - 1
while j >= 0 and s_list[j] == 'a':
j -= 1
if j >= 0:
s_list[j] = chr(ord(s_list[j]) - 1)
j += 1
while j < len(s_list):
s_list[j] = 'a'
j += 1
return ''.join(s_list)