• 1370. Increasing Decreasing String


    Given a string s. You should re-order the string using the following algorithm:

    1. Pick the smallest character from s and append it to the result.
    2. Pick the smallest character from s which is greater than the last appended character to the result and append it.
    3. Repeat step 2 until you cannot pick more characters.
    4. Pick the largest character from s and append it to the result.
    5. Pick the largest character from s which is smaller than the last appended character to the result and append it.
    6. Repeat step 5 until you cannot pick more characters.
    7. Repeat the steps from 1 to 6 until you pick all characters from s.

    In each step, If the smallest or the largest character appears more than once you can choose any occurrence and append it to the result.

    Return the result string after sorting s with this algorithm.

    Example 1:

    Input: s = "aaaabbbbcccc"
    Output: "abccbaabccba"
    Explanation: After steps 1, 2 and 3 of the first iteration, result = "abc"
    After steps 4, 5 and 6 of the first iteration, result = "abccba"
    First iteration is done. Now s = "aabbcc" and we go back to step 1
    After steps 1, 2 and 3 of the second iteration, result = "abccbaabc"
    After steps 4, 5 and 6 of the second iteration, result = "abccbaabccba"
    

    Example 2:

    Input: s = "rat"
    Output: "art"
    Explanation: The word "rat" becomes "art" after re-ordering it with the mentioned algorithm.
    

    Example 3:

    Input: s = "leetcode"
    Output: "cdelotee"
    

    Example 4:

    Input: s = "ggggggg"
    Output: "ggggggg"
    

    Example 5:

    Input: s = "spo"
    Output: "ops"

    class Solution {
        public String sortString(String s) {
            int le = s.length();
            int[] arr = new int[26];
            for(int i = 0; i < le; i++){
                arr[s.charAt(i) - 'a']++;
            }
            StringBuilder sb = new StringBuilder();
            while(le > 0){
                for(int i = 0; i < 26; i++){
                    if(arr[i] > 0){
                        sb.append((char) ('a' + i));
                        arr[i]--;
                        le--;
                    } 
                }
        
                for(int i = 25; i >= 0; i--){           
                    if(arr[i] > 0){
                        sb.append((char) ('a' + i));                
                        arr[i]--;
                        le--;
                    } 
                }
            }
            return sb.toString();
        }
    }

    按题意写。。

  • 相关阅读:
    FlexGrid布局
    Grid 布局管理器
    StaticBox布局管理器
    鼠标事件
    screen 常用命令
    wxPython 安装 及参考文档
    wxPython 界面编程的有关事件
    关于用python作为第三方程序,来调用shell命令的问题,以及返回值格式解析
    Mysql的增删改查
    linux ubuntu 系统修改源
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12460192.html
Copyright © 2020-2023  润新知