zoukankan      html  css  js  c++  java
  • 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();
        }
    }

    按题意写。。

  • 相关阅读:
    [LeetCode] 215. Kth Largest Element in an Array 数组中第k大的元素
    [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
    [LeetCode] 146. LRU Cache 近期最少使用缓存
    [LeetCode] 381. Insert Delete GetRandom O(1)
    [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间
    [LeetCode] 57. Insert Interval 插入区间
    [LeetCode] 56. Merge Intervals 合并区间
    [LeetCode] 155. Min Stack 最小栈
    移动web开发-------meta
    font-family
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12460192.html
Copyright © 2011-2022 走看看