wy的leetcode刷题记录_Day73

wy的leetcode刷题记录_Day73

声明

本文章的所有题目信息都来源于leetcode
如有侵权请联系我删掉!
时间:2024-1-11

前言

目录

  • wy的leetcode刷题记录_Day73
    • 声明
    • 前言
    • 2645. 构造有效字符串的最少插入数
      • 题目介绍
      • 思路
      • 代码
      • 收获

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

今天的每日一题是:[2645. 构造有效字符串的最少插入数(https://leetcode.cn/problems/minimum-additions-to-make-valid-string/solutions/?envType=daily-question&envId=2024-01-11)

题目介绍

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

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

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

示例 2:

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

示例 3:

输入:word = “abc”
输出:0
解释:word 已经是有效字符串,不需要进行修改。

思路

动态规划:将总问题划分为一个一个更小的子问题,dp[i]表示字符串前i个字符构造有效字符串所需要的最少插入数。判断当前字符:若大于前一个字符那么本字符就可以与前字符组成同一有效字符,且本有效字符组所需插入数较少1,对应;dp[i]=dp[i-1]-1;若小于前一个字符那么说明本字符属于另一组有效字符,且需要额外的俩个字符来组成有效字符,对应:dp[i]=dp[i-1]+2

代码

class Solution {
public:
    int addMinimum(string word) {
        int n=word.size();
        vector<int> dp(n+1);
        dp[0]=0;
        for(int i=1;i<=n;i++)
        {
            dp[i]=dp[i-1]+2;
            if (i > 1 && word[i - 1] > word[i - 2]) 
                dp[i] = dp[i - 1] - 1;

        }
        return dp[n];
    }
};

收获

动态规划的巩固

你可能感兴趣的:(leetcode,算法)