构造有效字符串的最少插入数

93 阅读1分钟

问题描述

给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。

如果字符串可以由 "abc" 串联多次得到,则认为该字符串有效。

输入输出解释
"b"2在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc"
"aaa"6在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc"
"abc"0word 已经是有效字符串,不需要进行修改

解决思路

这个问题的简化版本为,返回使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 构造有效字符串的最少插入数