zoukankan      html  css  js  c++  java
  • 力扣 上升下降字符串

    题目描述如下:(无论是哪一道题,题目一定一定要认真看清楚!!)

    给你一个字符串 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"
    示例 2:

    输入:s = "rat"
    输出:"art"
    解释:单词 "rat" 在上述算法重排序以后变成 "art"
    示例 3:

    输入:s = "leetcode"
    输出:"cdelotee"
    示例 4:

    输入:s = "ggggggg"
    输出:"ggggggg"
    示例 5:

    输入:s = "spo"
    输出:"ops"
     

    提示:

    1 <= s.length <= 500
    s 只包含小写英文字母。

     1 char* sortString(char* s) {
     2     int num[26];                        // 定义数组  0-25分别对应字母a-z  数组中数字的大小对应字母出现的次数
     3     memset(num, 0, sizeof(num));                    //初始化数组num
     4     int n = strlen(s);
     5     for (int i = 0; i < n; i++) {                   //将原始数组中的字母 转化成num数组中的数字
     6         num[s[i] - 'a']++;
     7     }
     8 
     9     char* ret = malloc(sizeof(char) * (n + 1));         //定义最后输出的数组
    10     int retSize = 0;                            
    11     while (retSize < n) {
    12         for (int i = 0; i < 26; i++) {              //正着把应该输入的字母 放到待输出的数组中
    13             if (num[i]) {
    14                 ret[retSize++] = i + 'a';
    15                 num[i]--;
    16             }
    17         }
    18         for (int i = 25; i >= 0; i--) {         //逆着
    19             if (num[i]) {
    20                 ret[retSize++] = i + 'a';
    21                 num[i]--;
    22             }
    23         }
    24     }
    25     ret[retSize] = 0;
    26     return ret;
    27 }

    这个是我复制官方题解,看懂了写下的注释,因为是刚开始做,还是不太熟悉,我认真想了30分钟,到中间不会了,然后看了题解,发现自己的思路还是太落后,所以我决定前期先慢慢摸索,等到可以20分钟内有自己完全的解题能力了,再认真解答。

  • 相关阅读:
    Dynamics AX
    专注于领域驱动设计的研究与实践系列转载
    在C#里使用属性,如Obsolete,Serializable,XmlRoot
    SQL 2005 with(nolock)详解
    Microsoft Domain Oriented NLayered .NET 4.0 App Sample (DDD Architecture)
    使用 .NET4 中的Task优化线程池【.NET4 多核并行】
    实现简单DTO适配器,解放你的双手
    最强悍的VS插件—reSharper
    通过代码配置 Log4net
    Microsoft NLayerApp案例理论与实践–DDD、分布式DDD及其分层【转】
  • 原文地址:https://www.cnblogs.com/KeithTee/p/14035340.html
Copyright © 2011-2022 走看看