我的力扣演算法1370-上升下降字串

一墜發表於2020-11-25

ok
看題:
在這裡插入圖片描述
在這裡插入圖片描述
其實吧,這題簡單,就是給你一個字串,然後讓你排序,排序的規則是,最開始是依靠字典序,從小到大排,然後如果找不到大的,就在從大到小排,直到所有字元都排好順序。最開始寫了一個演算法,按邏輯來說應該是可以實現的,但是用於時間複雜度太高,導致超出時間限制,所以就沒了下文,其實核心思想與下面程式碼相差不大。

class Solution {
public:
    string sortString(string s) {
        vector<int> aaa(26);//定義一個陣列,主要是為了存放一個字母出現了多少次,並且還根據下標進行了特殊的排序
        for(char t:s){//遍歷字串,然後存放字母出現次數
            aaa[t-'a']++;
        }
        string a;//存放排序後的字串
        while(a.length()<s.length()){//只要這個字串沒有給的字串大,也就是沒有遍歷完所有字串就繼續迴圈
            for(int i=0;i<26;i++){//遍歷次數陣列
                if(aaa[i]){//如果當前這個字母存在且沒被用完
                    a.push_back(i+'a');//就放在排序字串後面
                    aaa[i]--;//次數減少
                }
            }//這一步完成了升序排序
            for(int i=25;i>=0;i--){
                if(aaa[i]){
                    a.push_back(i+'a');
                    aaa[i]--;
                }
            }
        }//同理,但是由於是逆迴圈,所以完成的是降序排序。
        return a;
    }
};

ok

相關文章