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

苏州建站公司 诚找苏州聚尚网络平面设计师培训

苏州建站公司 诚找苏州聚尚网络,平面设计师培训,网站建设制作小程序开发,做视频哪个网站收入高2024.1.11 题目来源我的题解方法一 暴力模拟方法二 动态规划方法三 直接拼接方法四 计算组数 题目来源 力扣每日一题;题序:2645 我的题解 方法一 暴力模拟 直接模拟,根据题意可知 若是abc则不用插入,若是ab,ac,bc这需要 插入一…

2024.1.11

      • 题目来源
      • 我的题解
        • 方法一 暴力模拟
        • 方法二 动态规划
        • 方法三 直接拼接
        • 方法四 计算组数

题目来源

力扣每日一题;题序:2645

我的题解

方法一 暴力模拟

直接模拟,根据题意可知 若是abc则不用插入,若是ab,ac,bc这需要 插入一个字符,其他的则需要插入两个字符。因此使用String的替换功能,先将word中的所有abc替换成 _ ,然后再分别将ab,ac,bc从左到右替换成 _ ,最后统计剩下的字符中 a b c的数量

时间复杂度:O( n 2 n^2 n2) n是字符串的长度。除了遍历的O(n),还有替换方法内部的O(n)
空间复杂度:O(1)

public int addMinimum(String word) {word=word.replaceAll("abc","_");int n=word.length();if(n==0)return 0;int res=0;while(word.contains("ab")){res++;word=word.replaceFirst("ab","_");}while(word.contains("bc")){res++;word=word.replaceFirst("bc","_");}while(word.contains("ac")){res++;word=word.replaceFirst("ac","_");}for(int i=0;i<word.length();i++){char ch=word.charAt(i);if(ch>='a'&&ch<='c'){res+=2;}}return res;
}
方法二 动态规划

定义dp[i]状态表示前i个字符凑成若干个abc所需插入的字符数,则转移过程:

  • 若第i个字符单独在一组abc中,则dp[i]=dp[i-1]+2
  • 若word[i]>word[i-1]则表示word[i]和word[i-1]在一组abc中,则dp[i]=dp[i-1]-1

时间复杂度:O(n)
空间复杂度:O(n)

public int addMinimum(String word) {int n=word.length();int[] dp=new int[n+1];for(int i=0;i<n;i++){dp[i+1]=dp[i]+2;if(i<n-1&&word.charAt(i+1)>word.charAt(i)){dp[i+1]=dp[i]-1;}}return dp[n];
}

当然,可以发现转移至于i-1状态有关,所以可以使用滚动数组优化空间

public int addMinimum(String word) {int n=word.length();int dp_0=0;int dp_1=0;for(int i=0;i<n;i++){dp_1=dp_0+2;if(i<n-1&&word.charAt(i+1)>word.charAt(i)){dp_1=dp_0-1;}dp_0=dp_1;}return dp_1;
}
方法三 直接拼接

参考:官方题解

当前字符小于等于前面字符说明它们一定不在同一组 abc 中,只需要添置若干字符过渡这两者即可。例如 b前面是 c,则需要在中间添置 a,又例如 b 前面是 b,则需要在中间添置 ca。
以上两种情况可以用一个模型来表示,设当前字符是 x,前面字符是 y,那么需要添置的字符个数为 (x−y−1+3)mod  3。其中 +3 再对 3取模,可以应对 x 小于等于 y 的情况。
最后还需要处理头尾两个字符,word[0] 前面添置 word[0]−‘a′ 个字符,word[n−1]后面添置 ‘c′−word[n−1]个字符。两个可以合并为 word[0]−word[n−1]+2

时间复杂度:O(n)
空间复杂度:O(1)

 public int addMinimum(String word) {int n=word.length();int res=0;if(n==1)return 2;res+=word.charAt(0)-word.charAt(n-1)+2;for(int i=0;i<n-1;i++){int count=word.charAt(i+1)-word.charAt(i)-1+3;res+=count%3;}return res;}
方法四 计算组数

计算递增序列的组——也就是每一个递增序列都是一个组,然后使用一个变量count记录当前递增序列的长度,需要插入的字符数=3-count。在不满足递增的时候才会计算需要插入的字符数,并且重置count。

时间复杂度:O(n)。n是word的长度
空间复杂度:O(1)

public int addMinimum(String word) {int n=word.length();if(n==1){return 2;}int res=0;int count=1;for(int i=0;i<n-1;i++){if(word.charAt(i+1)<=word.charAt(i)){res+=3-count;count=1;}else{count++;}}return res+(3-count);}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

http://www.yayakq.cn/news/540890/

相关文章:

  • 做网站的计划书wordpress zerif lite
  • 平顶山网站建设企业网站建设与实施调研报告基本情况
  • 买书的网站排名郑州 网站建设有限公司
  • wordpress免费网页建站app开发公司杭州
  • 全球网站排名前100福建厦门网站建设
  • tv做后缀的动漫网站开发公司网站设计
  • 网站备案时要不要关闭外贸人才网论坛
  • 网站制作项目潍坊建设厅网站
  • 网站建设项目开发水文化建设网站
  • 昆明做网站猫咪科技jsp网站开发实例视频
  • 私自使用他人图片做网站宣传山西网站建设报价单
  • 电商网站竞价推广的策略哪个网站可以做付费推广
  • asp 微信网站长沙网络推广哪家好
  • 网站和微信同步建设昆明电子商务网站
  • 英雄联盟网站建设公司网站建设 费用
  • 国内wordpress主题网站泳衣服饰东莞网站建设
  • 专业定制网站开发广州 网站 建设
  • 做服装搭配图的网站有哪些在线平面设计软件免费版
  • 番禺网站推广公司求手机网址
  • 前端的网站重构怎么做个人网站 空间
  • 个人网站开发协议汕头网站制作找哪家
  • 阳江房产网站网站海外seo
  • 商城网站开发报海外自建站
  • 建设一个网站大概需要多久站长之家ping检测
  • 运营网站要多少费用网站建设分金手指排名十八
  • 建设工程信息发布网站怎么做免费域名网站
  • 大连网站建设找哪家好山东城市建设职业学院官方网站
  • 济宁门户网站建设建筑网站设计模版
  • 游戏交易网站开发高端网站建设方案
  • 合作在惠州做网站伊利集团网站建设怎么样呢