当前位置: 首页 > news >正文

【LeetCode每日一题】2645. 构造有效字符串的最少插入数(计算组数+动态规划+考虑相邻字母)

2024-1-11

文章目录

      • [2645. 构造有效字符串的最少插入数](https://leetcode.cn/problems/minimum-additions-to-make-valid-string/)
            • 方法一:计算组数
            • 方法二:动态规划
            • 方法三: 考虑相邻字母

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

在这里插入图片描述

方法一:计算组数

1.用count统计,能构成几组abc

2.如果当前字符大于之前字符,说明还在组内,不更新

3.如果当前字符小于等于之前字符,说明不是同一组的abc,组数更新

4.最终返回值:组数*3,再减去原本的字符数,就是要插入的次数

    //2645. 构造有效字符串的最少插入数---计算组数public int addMinimum2(String word) {int n = word.length();int count = 1;//最终构成abc的组数for (int i = 1; i < n; i++) {if (word.charAt(i - 1) >= word.charAt(i)) {//当前字符小于等于之前字符count++;//组数加一}}return count*3-n;//返回最终构成abc的总数-原本字符,即为要插入的次数}
方法二:动态规划

1.从1开始,d[i]为前i个字符拼成abc需要的最小插入数

2.情况一:word[i]单独存在于一组abc中,需要插两次,才能组成abc.插入次数为之前的次数+2

3.情况二:当前字符比前一个字符大,需要插一次,就可以组成abc.修改当前插入次数为:之前的次数-1,因为之前插入的两次中已经包含了当前字符。

    public int addMinimum(String word) {int n = word.length();int[] d = new int[n + 1];//d[]数组用来统计,1到n的插入次数//从1开始,d[i]为前i个字符拼成abc需要的最小插入数。for (int i = 1; i <= n; i++) {d[i] = d[i - 1] + 2;//word[i]单独存在于一组abc中,在之前情况的基础上+2. eg: a+bc / b+ac / c+abif (i > 1 && word.charAt(i - 1) > word.charAt(i - 2)) {//如果当前字符比前一个字符大,eg:ab/ ac / bcd[i] = d[i - 1] - 1;//当前字符和之前的字符在同一个abc中,重新覆盖d[i],前一个位置的插入数-1}}return d[n];}
方法三: 考虑相邻字母

1.设当前字符为x,前一个字符为y,

2.x大于y的情况:x-y-1

3.x小于等于y的情况:(x-y-1+3)mod 3 ,将计算的结果控制在0-2之间

4.开头的单独一个字符:word[0]-‘a’ ,结尾的一个字符:‘c’-word[n-1],合并为word[0]-word[n-1]+2

    public int addMinimum3(String word) {int n = word.length();int res = word.charAt(0) - word.charAt(n - 1) + 2;//合并处理开头和结尾的情况for (int i = 1; i < n; i++) {res += (word.charAt(i) - word.charAt(i - 1) + 2) % 3;}return res;}

1-11 生日快乐

点击移步博客主页,欢迎光临~

偷cyk的图

相关文章:

  • 携程testab算法分析
  • vue面试题集锦
  • LC 2645. 构造有效字符串的最少插入数
  • 【笔记】书生·浦语大模型实战营——第三课(基于 InternLM 和 LangChain 搭建你的知识库)
  • 【Flink精讲】Flink数据延迟处理
  • 【前端】使用javascript开发一个在线RGB颜色转换
  • wpf的资源路径
  • 基于ssm运动会管理系统的设计与实现 【附源码】
  • 少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)
  • 秋招阿里巴巴java笔试试题-精
  • GitHub pull request(傻瓜式入门版)
  • STM32F103RCT6使用数据手册及应用示例程序分享
  • 【Spring Boot】SpringMVC入门
  • 【测试发布】
  • C语言基础语法跟练
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Android交互
  • flask接收请求并推入栈
  • HTTP中的ETag在移动客户端的应用
  • IndexedDB
  • java中的hashCode
  • Laravel 中的一个后期静态绑定
  • nodejs调试方法
  • vue 个人积累(使用工具,组件)
  • Vue UI框架库开发介绍
  • 测试开发系类之接口自动化测试
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从伪并行的 Python 多线程说起
  • 给第三方使用接口的 URL 签名实现
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 赢得Docker挑战最佳实践
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • const的用法,特别是用在函数前面与后面的区别
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • !$boo在php中什么意思,php前戏
  • # 达梦数据库知识点
  • #vue3 实现前端下载excel文件模板功能
  • (1)(1.9) MSP (version 4.2)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C11) 泛型表达式
  • (c语言)strcpy函数用法
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ros//EnvironmentVariables)ros环境变量
  • (二)学习JVM —— 垃圾回收机制
  • (分类)KNN算法- 参数调优
  • (原創) 未来三学期想要修的课 (日記)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ..回顾17,展望18
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net Application的目录
  • .Net Winform开发笔记(一)
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖