1. 程式人生 > 實用技巧 >20.11.25 leetcode1370

20.11.25 leetcode1370

題目連結:https://leetcode-cn.com/problems/increasing-decreasing-string/

題意:給你一個包含26個字母的字串讓你構造一個新的字串,規則是先提出最小的字元(這些字元間不能相同)放進新字串,再從剩下的字元裡提出最大的字元(也不能相同)放進新字串。不斷執行這個過程直到所有字元都放進新字串。

分析:一開始想動態的處理,就是每次提出來一個字元後就將原字串中的該字元刪掉重新處理,發現這樣不行。。。。最後注意到字串只包含26個字母,就用一個book陣列存一下每個字母出現了多少次,每次執行先從a-z,再從z-a即可。

class Solution {
public
: string sortString(string s) { string ans=""; int book[26]; memset(book,0,sizeof(book)); for(int i=0;i<s.length();i++){ book[s[i]-'a']++; } int len=s.length(); while(len){ int cnt=0; for(int i=0;i<26;i++){
if(book[i]){ ans+=char(i+'a'); cnt++; book[i]--; } } for(int i=25;i>=0;i--){ if(book[i]){ ans+=char(i+'a'); cnt++; book[i]
--; } } len-=cnt; } return ans; } };