LC 100249. 替换字符串中的问号使分数最小
https://leetcode.cn/problems/replace-question-marks-in-string-to-minimize-its-value/description/
这题如果想清楚的话还是非常简单的。考虑一个情况就是比如下面这样的字符串
"z .. z .. ? z z ? "
假设两个问号里面只能填写一个z的话,其实填写在哪里是没有任何关系的。对于一个字符,cost完全取决于它在这个字符串里面出现多少次。
如果想清楚这个问题的话,那么算法就是将所有的字符平均使用,完了做一个排序确保字符串序是最小的。
class Solution:
def minimizeStringValue(self, s: str) -> str:
from collections import Counter
cnt = Counter(list(s))
ans = []
sel = []
for c in s:
if c == '?':
mv, mc = 1 << 30, None
for idx in range(26):
c2 = chr(ord('a') + idx)
if cnt[c2] < mv:
mv = cnt[c2]
mc = c2
cnt[mc] += 1
sel.append(mc)
sel.sort(reverse=True)
for c in s:
if c == '?':
ans.append(sel.pop())
else:
ans.append(c)
# print(ans)
return ''.join(ans)