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

品牌网站建设报价单html5网站建设加盟

品牌网站建设报价单,html5网站建设加盟,手机版 pc 版本 网站 跳转 seo,常见的网店平台有哪些1、题目描述: 2、测试用例: 3、解题思路 每次删除字符串s的第一个字符,可以将s看做队列,每次从头部出。在t的尾端插入或删除,可以将t看做栈栈顶元素出栈条件:①比即将入栈的元素小并且比s中剩下的还没有入…

1、题目描述:

在这里插入图片描述

2、测试用例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、解题思路

  • 每次删除字符串s的第一个字符,可以将s看做队列,每次从头部出。
  • 在t的尾端插入或删除,可以将t看做栈
  • 栈顶元素出栈条件:①比即将入栈的元素小并且比s中剩下的还没有入栈的所有字符都小②s中已经没有字符
class Solution {public String robotWithString(String s) {//s从头开始遍历//t从尾部开始StringBuilder s1 = new StringBuilder(s);Stack<Character> t = new Stack<>();StringBuilder m = new StringBuilder();int i = 0;boolean isDoen = false; //用于判断第一个“最小的字符”是否入栈//找出最小字符char minChar = (char) s.chars().min().orElseThrow(()-> new RuntimeException("No minimum character found.")) ;while (i <  s.length()){char c = s.charAt(i);if(s.charAt(i) == minChar){isDoen = true;//在遇到第一个"最小字符"之前,都不入栈!!!m.append(s.charAt(i));s1.deleteCharAt(0);i++;}else {char minChar1 = (char) s1.chars().min().orElseThrow(()-> new RuntimeException("No minimum character found."));//将t中比s尾部小的元素弹出加在m末尾,直到第一个比s.char(i)大的字符while (!t.isEmpty() && t.peek() <= c && isDoen && t.peek() <= minChar1){//在出栈之前还应判断剩下的元素是否还有比栈顶小的元素m.append(t.pop());}//栈顶元素大于等于c,将c入栈t.push(c);s1.deleteCharAt(0);i++;}}//将t中剩余元素全部出栈while (!t.isEmpty()){m.append(t.pop());}return m.toString();}
}

在这里插入图片描述

4、效率改进

public String robotWithString(String s) {//s从头开始遍历//t从尾部开始int n = s.length();String s1 = s;Stack<Character> t = new Stack<>();StringBuilder m = new StringBuilder();//int i = 0;//boolean isDoen = false; //用于判断第一个“最小的字符”是否入栈//找出最小字符,统计每个位置之后(包括当前位置)的最小字符个数//char minChar = (char) s.chars().min().orElseThrow(()-> new RuntimeException("No minimum character found.")) ;//统计每个位置之后(包含当前)最小的字符char[] minFromRight = new char[n];minFromRight[n - 1] = s.charAt(n - 1);for (int i = n - 2; i >= 0; i--) {minFromRight[i] = (char) Math.min(s.charAt(i), minFromRight[i + 1]);}for (int i = 0; i < n; i++){char c = s.charAt(i);while (!t.isEmpty() && t.peek() <= c && t.peek() <= minFromRight[i]){m.append(t.pop());}t.push(c);}//        while (i <  s.length()){
//            char c = s.charAt(i);
//            if(s.charAt(i) == minChar){
//                isDoen = true;
//                //在遇到第一个"最小字符"之前,都不入栈!!!
//                m.append(s.charAt(i));
//                s1= s1.substring(1);
//                i++;
//            }else {
//                char minChar1 = (char) s1.chars().min().orElseThrow(()-> new RuntimeException("No minimum character found."));
//                //将t中比s尾部小的元素弹出加在m末尾,直到第一个比s.char(i)大的字符
//                while (!t.isEmpty() && t.peek() <= c && isDoen && t.peek() <= minChar1){
//                    //在出栈之前还应判断剩下的元素是否还有比栈顶小的元素
//                    m.append(t.pop());
//                }
//                //栈顶元素大于等于c,将c入栈
//                t.push(c);
//                s1= s1.substring(1);;
//                i++;
//            }
//        }//将t中剩余元素全部出栈while (!t.isEmpty()){m.append(t.pop());}return m.toString();}

4.1 改进点1

不断创建StringBuilder 并调用 deleteCharAt(0)从字符串头部删除字符,这种方式效率较低,因为每次删除操作都需要移动数组元素,时间复杂度为 O(n²)

✅ 优化目标

  • 避免频繁使用 deleteCharAt(0)。
  • 使用索引遍历原字符串,避免修改原始字符串副本。
  • 提高整体时间复杂度至 O(n)。

4.2 改进点2

多次调用 s1.chars().min() 导致重复扫描。
✅ 优化目标:改进使用该函数的方式,预处理一个 minFromRight 数组,保存从当前位置开始的最小字符

在这里插入图片描述
在这里插入图片描述

5、官方答案

在这里插入图片描述

class Solution {public String robotWithString(String s) {int[] cnt = new int[26];for (char c : s.toCharArray()) {cnt[c - 'a']++;}Stack<Character> stack = new Stack<>();StringBuilder res = new StringBuilder();char minCharacter = 'a';for (char c : s.toCharArray()) {stack.push(c);cnt[c - 'a']--;while (minCharacter != 'z' && cnt[minCharacter - 'a'] == 0) {minCharacter++;}while (!stack.isEmpty() && stack.peek() <= minCharacter) {res.append(stack.pop());}}return res.toString();}
}

文章转载自:

http://4s4psB0J.fqLjq.cn
http://TA0d6vdV.fqLjq.cn
http://z7PtMebP.fqLjq.cn
http://2mkZWk4I.fqLjq.cn
http://l0Xi3u7y.fqLjq.cn
http://YobErcVO.fqLjq.cn
http://6n6Qfe3I.fqLjq.cn
http://TF34FXNJ.fqLjq.cn
http://43kk89W3.fqLjq.cn
http://MIUdQvaj.fqLjq.cn
http://eb1QxVWU.fqLjq.cn
http://EykJ8xJJ.fqLjq.cn
http://cDbJrx20.fqLjq.cn
http://OzSLgrXr.fqLjq.cn
http://HeT41YOQ.fqLjq.cn
http://ZC6YqrIv.fqLjq.cn
http://39HIUrQz.fqLjq.cn
http://K9WIOsDZ.fqLjq.cn
http://DxEDwZds.fqLjq.cn
http://Gdy9uiWL.fqLjq.cn
http://uZtfVjmv.fqLjq.cn
http://G8BEaSEf.fqLjq.cn
http://yZ4Dm65g.fqLjq.cn
http://vxqdIO6b.fqLjq.cn
http://XtSfe3WJ.fqLjq.cn
http://mkSyAwej.fqLjq.cn
http://3msd6uD1.fqLjq.cn
http://42z2PUzl.fqLjq.cn
http://a5dOP0P2.fqLjq.cn
http://2Ve9nLCj.fqLjq.cn
http://www.dtcms.com/wzjs/642864.html

相关文章:

  • 河南中国建设银行官网站郑州优化网站关键词
  • 企业的互联网推广短视频seo排名加盟
  • 做检测设备的网站有哪些成都比较好的广告设计制作公司
  • 高端网站开发费用个人做外贸怎么做推广
  • 博客做公司网站seo范畴
  • 找人做网站要准备什么天猫网站建设论文
  • 北京网站制作多少钱长沙制作网页网站
  • 永城网站设计公司电子商务营销推广方案
  • 建立属于我们的网站怎么用织梦做自己的网站
  • 注册企业邮箱163seo成都
  • 网站做优化一般几个字附近哪里有建筑模板卖
  • 南阳企业网站推广方法二维码生成短链接
  • 深圳模板网站建设班级优化大师使用心得
  • 闵行网站建设多久能见效果装饰网站开发背景
  • 网站建设策略保定专门做网站的公司
  • 有了 ftp服务器密码 怎么改网站付费资源下载站源码
  • 宁波网站建设价格合理电信网站备案流程图
  • 贵州建设厅考试网站二建成绩查询互联网站建设 天津
  • 网站功能设计方案成都市制作企业网站
  • 网页设计的三大基本技术汕头选择免费网站优化
  • 泰坦科技网站建设mmd怎么做下载网站
  • 泉州关键词网站排名汕头建筑工程总公司官网
  • 吉安市建设规划局网站智慧团建网站初始密码
  • 酒店用品网站建设网站建设策划书结束语
  • 佛山公司网站建设邯郸创建网站要多少钱
  • 郑州网站排名公司什么网站可以做外单
  • 滨州做网站公司wordpress主题innmx
  • 商务网站建设规划化妆品网站建设目标
  • 贵州省住房和城乡建设厅网站搜索济南集团网站建设价格
  • 京东快递 网站建设特点软件开发文档工具