给你一个字符串 s ,请你根据下面的算法重新构造字符串:

从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。
从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。
重复步骤 2 ,直到你没法从 s 中选择字符。
从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。
从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。
重复步骤 5 ,直到你没法从 s 中选择字符。
重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。
在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。

请你返回将 s 中字符重新排序后的 结果字符串 。

示例 1:

输入:s = “aaaabbbbcccc”
输出:“abccbaabccba”
解释:第一轮的步骤 1,2,3 后,结果字符串为 result = “abc”
第一轮的步骤 4,5,6 后,结果字符串为 result = “abccba”
第一轮结束,现在 s = “aabbcc” ,我们再次回到步骤 1
第二轮的步骤 1,2,3 后,结果字符串为 result = “abccbaabc”
第二轮的步骤 4,5,6 后,结果字符串为 result = “abccbaabccba”

思路:
使用一个数组将字母数量计算保存,后续操作只需遍历数组,按规则取出即可

string sortString(string s) {//计算每个字母的个数,用vector存放vector<int> ch(26, 0);for(int i = 0; i < s.size(); ++i){ch[s[i]-'a']++;}string res = "";//重新构造字符串int max_size = s.size();int res_size = 0;while(res_size < max_size){//有小到大for(int i = 0; i < 26; ++i){if(ch[i] > 0){res+= (i+'a');res_size++;ch[i]--;}}//由大到小for(int i = 25; i >= 0; --i){if(ch[i] > 0){res+= (i+'a');res_size++;ch[i]--;}}//cout << res << endl;}return res;}

leetcode题库1370-- 上升下降字符串相关推荐

  1. LeetCode题库整理【Java】—— 3 无重复字符的最长子串

    LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...

  2. LeetCode题库整理【Java】—— 7整数反转

    LeetCode题库整理[Java] 7.整数反转 题目:给出一个32位的有符号整数,你需要将这个这个整数中每位上的数字进行反转. 示例1: 输入: 123 输出: 321 示例2: 输入: -123 ...

  3. LeetCode 题库 全 JAVA 解题---771.宝石与石头

    LeetCode 题库 全 JAVA 解题 771.宝石与石头 原题回顾: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥 ...

  4. LeetCode题库解答

    此篇博客用于记录自己在 LeetCode 网站中所做过的习题,便于日后忘记了进行查阅.前期全部采用 Python3的语法来解答,后续时间充裕的话,希望自己可以试着用 JavaScript.C++/C ...

  5. LeetCode题库第867题 转置矩阵

    LeetCode题库第867题 转置矩阵 LeetCode题库第867题 转置矩阵 我首先想到的方法是新建一个二维的矩阵,然后遍历原来的矩阵,将每一个元素放在新矩阵中该放的位置: // javapub ...

  6. LeetCode题库第888题 公平的糖果棒交换

    LeetCode题库第888题 公平的糖果棒交换 LeetCode第888道题 公平的糖果棒交换 首先,题目中说他们两个人的糖果的总数量是不一样的,并且要将A中的一个糖果和B的一个糖果交换后使得他们两 ...

  7. LeetCode题库第2题 两数相加

    两数相加 LeetCode题库第二题 两数相加 看完题目,就可以将题目抽象为三个指针,前两个指针是l1和l2,后一个指针是我们要求的,这三个指针同时移动,由于可能会产生进位,所以可以用一个变量来存储这 ...

  8. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  9. LeetCode题库整理【Java】—— 2 两数相加

    LeetCode题库整理[Java] 2.两数相加 题目:给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果, ...

  10. LeetCode题库整理【Java】—— 1两数之和

    LeetCode题库整理[Java] 1.两数之和 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nu ...

最新文章

  1. 用shell脚本配置oracle安装需求
  2. 早上醒来收获一个Surprise,成为CSDN博客专家了
  3. 根据关键字检索相关视频
  4. 关于无法加载sass 模块问题。vue2.0中报错ERROR :scss can't resolve 'scss-loader'
  5. 拷贝的代码中去除行号的方法
  6. 如何一站式快速构建企业全场景数据库管理平台?
  7. [项目更新] 集成RabbitMQ队列与EventBus总线
  8. 谷歌浏览器flash_谷歌浏览器不支持Flash Player的问题
  9. Redis---概述
  10. vue中的slot插槽
  11. 黑盒法测试c语言,黑盒测试的测试用例设计方法(经典理论知识,推荐)
  12. 产品经理为什么越来越不值钱?不懂数据,只能尴尬退场
  13. 20190814:(leetcode习题)移动零 (补)
  14. 【SPOJ】1043 Can you answer these queries III
  15. Java发送邮件换行问题
  16. 小米路由器4a开发版固件_小米路由器 4A 刷入lean 的 openwrt/lede
  17. 安卓投屏大师_玩转手机投屏,我推荐三款不一样的投屏工具!
  18. vim查找和替换字符串
  19. Activeperl安装教程
  20. 虚拟光驱xp版32位_Windows 32位系统将成历史,勾起了我对Windows XP满满的回忆

热门文章

  1. php语言输出九九乘法表_PHP 输出九九乘法表
  2. php框架原理 php初识,初识 PHP 7 源码整体框架
  3. 格子染色问题 java_《Mathematical Olympiad——组合数学》——染色问题
  4. 数据结构(字符串)—— 两字符串前后缀相等
  5. Java 1.3.1 带标签的 break语句
  6. 使用maven构建多模块项目
  7. 【年终总结】可圈可点的2018年
  8. 你必须懂的Java对象引用
  9. Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
  10. 23-[模块]-logging