问题描述
给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。
如果字符串可以由 "abc" 串联多次得到,则认为该字符串有效。
| 输入 | 输出 | 解释 |
|---|---|---|
| "b" | 2 | 在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" |
| "aaa" | 6 | 在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" |
| "abc" | 0 | word 已经是有效字符串,不需要进行修改 |
解决思路
这个问题的简化版本为,返回使word有效的串联"abc"对个数。一旦能够确定最终word由k个"abc"串联得到,那么插入的字母数就是 3 * k - len(word)。
编程实现
class Solution:
def addMinimum(self, word: str) -> int:
k, prev = 0, 'z'
for ch in word:
k += ch <= prev
prev = ch
return k * 3 - len(word)
问题延展
字符串的构造规则可以由"abc"换成"abcdef***"串联。不要试图通过模拟构造的方式来解决,换一种思考方式,从整体上来计算,忽略其中的构造细节。
leetcode题目
- 2645 构造有效字符串的最少插入数