博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1255 字典序最小的子序列(贪心)
阅读量:7039 次
发布时间:2019-06-28

本文共 2089 字,大约阅读时间需要 6 分钟。

1255 字典序最小的子序列

1 秒 131,072 KB 40 分 4 级题

思路:

创建一个标记数组标记是否在栈中

创建一个数量数组,标记字符个数

维护一个栈,循环字符串

  • 当栈顶>当前字符 && 栈顶字符后面还会出现,那么 替换字符
  • 当前字符没有加入到栈中,直接加入
  • 如果栈顶和当前元素一致,个数-1

在每个操作中,都会有解除/添加标记,数量-1的操作

代码:

package _51_node.greedy;import java.util.Scanner;import java.util.Stack;public class ex_1255 {    /**     * 1255 字典序最小的子序列     * 1 秒  131,072 KB 40 分 4 级题     *     * 维护一个栈,3种操作,     * 1、如果栈顶ch1 > 输入字母ch2,并且ch1后面还出现,并且栈里没有ch2,则加入栈     * 2、如果栈里没有这个字母,那么入栈     * 3、如果相同,或者已经在栈里,不入栈     * @param args     */    public static void main(String[] args) {        Scanner cin = new Scanner(System.in);        String str = cin.nextLine();        int[] arr = new int[26];        int[] bool = new int[26];        for (int i = 0; i < str.length(); i++) {            char ch = str.charAt(i);            arr[ch - 'a']++;            bool[ch - 'a'] = 0;        }        Stack
stack = new Stack<>(); stack.push(str.charAt(0)); arr[str.charAt(0) - 'a']--; bool[str.charAt(0) - 'a'] = 1; for (int i = 1; i < str.length(); i++) { char ch1 = stack.peek(); char ch2 = str.charAt(i); if (arr[ch1 - 'a'] >= 1 && ch2 < ch1 && bool[ch2 - 'a'] == 0) { stack.pop(); bool[ch1 - 'a'] = 0; while(!stack.empty()) { ch1 = stack.peek(); if(ch1 > ch2 && arr[ch1 - 'a'] >= 1 ) { stack.pop(); bool[ch1 - 'a'] = 0; }else break; } stack.push(ch2); bool[ch2 - 'a'] = 1; arr[ch2 - 'a']--; }else if(bool[ch2 - 'a'] == 0) { bool[ch2 - 'a'] = 1; stack.push(ch2); arr[ch2-'a']--; }else if (ch1 == ch2 || bool[ch2 - 'a'] == 1) { arr[ch2 - 'a']--; } } String s = ""; while (!stack.empty()) { s += stack.pop(); } System.out.println(new StringBuilder(s).reverse().toString()); }}

转载于:https://www.cnblogs.com/somliy/p/10018585.html

你可能感兴趣的文章
Linux常用快捷键以及如何查看命令帮助
查看>>
electron 学习笔记
查看>>
vs 开发 qt 遇到 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”) 解决方案...
查看>>
Oracle死锁处理实例
查看>>
[转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
查看>>
【hive】——Hive sql语法详解
查看>>
python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
查看>>
一篇网络流的好blog
查看>>
Python基础之继承与派生
查看>>
filter、map、every函数的使用
查看>>
黑马程序员——iOS学习——UITableView表视图单元样式
查看>>
Bash基础——减号-
查看>>
Android适配文件dimen自动生成代码
查看>>
走马观花--快餐学python笔记
查看>>
jquery轻量级富文本编辑器Trumbowyg
查看>>
VMware Workstation 不可恢复错误 (vcpu-0)
查看>>
数据对齐笔记
查看>>
Linux 常用命令
查看>>
Web应用配置虚拟主机(www.baidu.com)
查看>>
还为代码编写愁吗?代码生成器将让你编写代码测试代码速度极大提升
查看>>