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

比较好的设计欣赏网站电商网站策划书

比较好的设计欣赏网站,电商网站策划书,旧域名新网站,做暧小视频xo网站去除重复字母 题目描述单调栈代码演示进阶优化 上期经典 题目描述 难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对…

去除重复字母

  • 题目描述
    • 单调栈
    • 代码演示
    • 进阶优化
  • 上期经典

题目描述

难度 - 中等
leetcode316. 去除重复字母

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

示例 1:
输入:s = “bcabc”
输出:“abc”

示例 2:
输入:s = “cbacdcbc”
输出:“acdb”

提示:
1 <= s.length <= 1e4
s 由小写英文字母组成

在这里插入图片描述

单调栈

题目要求总共有三点:
要求一、要去重。
要求二、去重字符串中的字符顺序不能打乱s中字符出现的相对顺序。
要求三、在所有符合上一条要求的去重字符串中,字典序最小的作为最终结果。

根据要求三,我们就能想到这题可以用单调栈,用单调栈来保证字典序排列。
要求一,我们要去重,因此要加上出栈的条件。
只有在栈顶元素字典序靠后,且在之后还有出现次数才弹出栈.同时压栈时应该注意栈中没有出现过该元素才能压栈.

若输入为bcacc

  1. b 入栈
  2. c 入栈时因为字典序靠后,且栈中没出现过c,直接压栈
  3. a 入栈,因为 a 的字典序列靠前且a没有出现过,此时要考虑弹出栈顶元素.
    元素 c 因为在之后还有 至少一次 出现次数,所以这里可以弹出.
    元素 b 之后不再出现,为了保证至少出现一次这里不能再舍弃了.
  4. c 入栈时依然因为字典序靠后且栈中没出现过直接压栈
  5. c 入栈时栈中已经出现过c,跳过该元素
    输出结果为 bac

代码演示

  String removeDuplicateLetters(String s) {Stack<Character> sta = new Stack<>();//只有小写字母,所以可以用26长度就可以了int[] count = new int[26];//统计每个字出现的次数,方便判断何时可以出栈for (char c : s.toCharArray()){count[c - 'a']++;}boolean[] inStack = new boolean[26];for (char c : s.toCharArray()){//每遍历一个元素,就把字符出现的次数减一count[c - 'a']--;if (inStack[c - 'a']){continue;}//出栈的三个条件//栈内元素不为null//当前元素字典序小于之前入栈的元素//并且保证后面还有要弹出的元素,如果后面没有了,就不能弹出while(!sta.isEmpty() && sta.peek() > c && count[sta.peek() - 'a'] > 0){inStack[sta.pop()  - 'a'] = false;}sta.push(c);inStack[c - 'a'] = true;}StringBuffer sb = new StringBuffer();while (!sta.isEmpty()){sb.append(sta.pop());}//栈先进后出,因此打印结果时要先逆序return sb.reverse().toString();}

进阶优化

上面解法中,我们用栈去保存元素,然后最后再倒进stringBuilder里,其实我们一开始就可以用StringBuilder,去存储元素,最后保留的结果,就是要的答案

代码演示:

 String removeDuplicateLetters(String s) {Stack<Character> sta = new Stack<>();StringBuffer sb = new StringBuffer();char[] chars = s.toCharArray();int[] count = new int[256];for (int i = 0; i < chars.length;i++){count[chars[i] - 'a']++;}boolean[] inStack = new boolean[26];for (char c : chars){count[c - 'a']--;if (inStack[c - 'a']){continue;}while(sb.length() > 0 && sb.charAt(sb.length() - 1) > c &&  count[sb.charAt(sb.length() - 1) - 'a'] > 0){inStack[sb.charAt(sb.length() - 1)  - 'a'] = false;sb.deleteCharAt(sb.length() - 1);}sb.append(c);inStack[c - 'a'] = true;}return sb.toString();}

上期经典

leetcode410. 分割数组的最大值

http://www.15wanjia.com/news/178844.html

相关文章:

  • 一元购网站建设多少钱上海网站建设的英文
  • 江苏广泽建设公司网站wordpress多大
  • 广东炒股配资网站开发一些大型网站的服务器需要租用多大的带宽
  • Joomla外贸网站模板施工企业会计分录大全
  • 西安网站seo优化移动端企业网站模板下载
  • 删负面的网站桂林网站优化价格
  • 旅游网站开发系统的er图中国建设银行官方网站 认证
  • 微餐饮建站费用高大上的企业网站欣赏
  • 做淘宝客怎么建网站网页制作工具 知乎
  • 设计网站推荐语重庆教育建设有限公司网站
  • 网站后台上次图片wordpress 实用主题
  • 克州seo整站排名网络技术课程
  • 郑州网站开发douyanetseo标题优化导师咨询
  • 推荐优秀的企业网站设计怎样设计一个公司网站
  • 网站宣传夸大处罚wordpress 侧分类
  • 大学网站建设策划书沉默是金吉他谱
  • 互联网网站如何做流量统计霸气的网络公司名字
  • 重庆哪里有做淘宝网站推广的小程序模板素材
  • 资讯cms网站有那些汉中门户网工程招标
  • 可以发描文本的网站熊猫办公ppt模板下载免费
  • 淘宝网站建设属于什么类目wordpress排除首页显示
  • 常州网站建设推广公司wordpress更新慢
  • 网站建设中销售人员会问客户的问题互联网营销案例分析
  • 怎么能自己创建网站厦门网站seo
  • 旅游商业网站策划书做网站公司(信科网络)
  • 会网站开发维护的ps什么岗位珠海电商网站建设
  • 页面设计网站素材wordpress如何添加模板
  • o2o网站建设公司排名wordpress 4.5.6
  • 宁波有没有开发网站的公司新浪微博指数查询
  • 视频教学网站怎么做竞价推广代运营公司