首页 > 其他分享 >lc 2645. 构造有效字符串的最少插入数

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

时间:2024-01-11 14:22:49浏览次数:31  
标签:abc word lc int 2645 插入 字符串 dp

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

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

样例1

输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" 。

样例二

输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。

样例三

输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。

分析

dp[i]:将前 i个字符(为了方便编码,下标从 1 开始)拼凑成若干个 abc 所需要的最小插入数。
初始化 dp[0]=0

转移过程:

  1. 若第i个字符只能单独构成"abc",则dp[i]=dp[i-1]+2
  2. 若第i个字符可与前面的字符共同构成"abc",则dp[i]=dp[i-1]-1
    d[i] 取以上情况的最小值。在本题中,每个字符总是尽可能的与前面的字符去组合,因此情况 2优于情况 1
class Solution {
public:
    int addMinimum(string word) {
        int n = word.size();
        int dp[n+1]; //使前n个字符构造为有效字符串所需的最小插入数
        dp[0]=0;
        for(int i=1;i<=n;i++){
            //如果第i个字符在“abc”中是单个字符
            dp[i]=dp[i-1]+2; //单独构成
            if(word[i]>word[i-1]) //可与前面的字符组成有效字符串
                dp[i]=dp[i-1]-1; //这种情况比起上面的情况更优
        }
        return dp[n];
    }
};

标签:abc,word,lc,int,2645,插入,字符串,dp
From: https://www.cnblogs.com/w12312/p/17958500

相关文章

  • 【C++/Qt】QLCDNumber-电子时钟实战
    头文件:#ifndefDIGITALCLOCK_H#defineDIGITALCLOCK_H#include<QLCDNumber>classdigitalClock:publicQLCDNumber{Q_OBJECTpublic:digitalClock(QWidget*parent=0);protected:voidmousePressEvent(QMouseEvent*event);//鼠标点击事件void......
  • 使用R语言和pholcus库进行网页爬取的简单示例
    如果您想要下载网页上的丰富内容,pholcus库似乎是一个用于网页爬虫的工具,但请注意使用爬虫工具时需要遵守网站的使用规则和法律法规。未经允许的爬取行为可能违反网站的服务条款,并可能导致法律问题。以下是一个使用pholcus库的简单示例。请确保您已经安装了pholcus库,可以通过执行以......
  • (△△△)给定 n 个字符串,请对 n 个字符串按照字典序排列。 数据范围: 1 \le n \le 100
    描述给定n个字符串,请对n个字符串按照字典序排列。数据范围:1\len\le1000\1≤n≤1000,字符串长度满足1\lelen\le100\1≤len≤100输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:数据......
  • python第三节:Str字符串类型(3)
    str.index(sub[, start[, end]])类似于 find(),但在找不到子字符串时会引发 ValueError。例子:str1='mynameisjack!'print(str1.index('i'))print(str1.index('b'))结果:Traceback(mostrecentcalllast): File"D:/pythonProject/test/test2024011......
  • 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆
    描述输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001数据范围:0\len\le2^{30}-1\0≤n≤230−1输入描述:输入一个int整数输出描述:将这个整数以字符串的形式逆序输出点击查看代码#include<i......
  • js 字符串处理函数
    length、charAt()、charCodeAt()和fromCharCode()返回的结果都跟预期是一样的。这是因为在这个范围内,每个字符都是用16位表示的,而这几个方法也都基于16位码元完成操作。只要字符编码大小与码元大小一一对应,这些方法就能如期工作。这个对应关系在扩展到Unicode增补字符平面......
  • python第三节:Str字符串类型(2)
    str.format(*args, **kwargs)执行字符串格式化操作。语法:点号前面是一个带槽(由大括号表示)的字符串,字符串里面可以设置各种参数和格式控制标记,后面是format和替换的字符串。{参数序号:格式控制标记}如下六个按照顺序使用。:填空对齐宽度逗号精度类型冒号用于填充的单个字符<左对齐>......
  • JOSN字符串字段遍历(json-path)
    官网https://github.com/json-path/JsonPath依赖<dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.5.0</version></dependency>......
  • 【教3妹学编程-算法题】找出出现至少三次的最长特殊子字符串 I
    3妹:2哥2哥,我掐指一算,今天是你的发薪日吧,要不要请我吃个饭哈?2哥:切,这还用算,每个月都是10号嘛。3妹:2哥,让我吃个瓜,能不能告诉我你的工资是多少,吓死我!2哥:工资怎么能随便告诉别人呢,别人比你多了你难受,别人比你少了别人难受,还是不知道别人的好。3妹:那你到底请不请吃饭嘛。2哥:想吃饭哪那么......
  • 【字典树/trie树】实现高效插入和查询字符串的数据结构
    本文是https://www.acwing.com/problem/content/description/837/的总结,有兴趣可以做做字典树的实现依赖于树结构,有两种操作,1是插入字符串,2是查找字符串。使用idx维护最新的结点下标。如下图,假设我们维护一个 可以看到,我们维护了一个树形结构储存了左边的字符串,但......