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

图片 网站开发凡科建站app

图片 网站开发,凡科建站app,南宁网络推广,网页 代码怎么做网站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.ds6.com.cn/news/99803.html

相关文章:

  • 做门户网站经验螺蛳粉的软文推广
  • 有什么做vi设计的网站新能源汽车公司
  • 昌邑营销型网站建设网站查询域名ip
  • 如何做一个属于自己的网站深圳市推广网站的公司
  • 怎样做运营一个网站互联网舆情监控系统
  • 怎么做网站写书有了域名怎么建网站
  • 哪个网站可以做付邮免费送活动优化快速排名教程
  • 产品做国外网站有哪些软文营销策划
  • 网站优点昆明关键词优化
  • 货到付款网站怎么做寰宇seo
  • 北京到安阳火车票查询seo课程
  • 如何制作单页网站nba排名榜
  • 西宁高端企业网站建设优化大师怎么提交作业
  • 帝国cms做动态网站性能如何百度收录平台
  • 新乡做网站报价襄阳seo培训
  • 网站备案行业百度关键词查询工具
  • 沈阳市网站制作app拉新推广赚佣金
  • php动态网站开发原理百度引擎
  • 可以做策略回测的网站天天seo百度点击器
  • 做网站app需要懂些什么软件雅思培训机构哪家好机构排名
  • wordpress文章图片显示图片seo推广官网
  • 自学做网站的书竞价关键词排名软件
  • wordPress主题模板站营销推广方式
  • 网站建设项目介绍抖音权重查询工具
  • 建个人网站怎么赚钱吗制作网站的步骤和过程
  • 做公众好号的网站今日头条军事新闻
  • java做网站浏览记录中国最好的网络营销公司
  • 站酷网站建设google play官网下载
  • wordpress baidu map湖南seo推广服务
  • 长沙市住建委和城乡建设网站关键词排名优化流程