上升下降字串java

陌丶塵發表於2020-11-25

給你一個字串 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 只包含小寫英文字母。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/increasing-decreasing-string
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

ps:今天我的思路居然和題解一樣,而且沒有題解二,今天的題解不太行啊

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

相關文章