Remove K Digits 去除重複字母
阿新 • • 發佈:2019-02-20
給定一個僅包含小寫字母的字串,去除字串中重複的字母,使得每個字母只出現一次。需保證返回結果的字典序最小(要求不能打亂其他字元的相對位置)。
示例 1:
輸入:"bcabc"
輸出:"abc"
示例 2:
輸入:"cbacdcbc"
輸出:"acdb"
思路:這道題與其餘2道題的解答類似:
Create Maximum Number
Remove Duplicate Letters
Remove K Digits
都是維護一個遞增序列,如果當前帶插入字元c比棧頂元素的ascll碼小,就彈出棧頂元素,否則壓入棧。最後得到的一定是最小的元素,對於這道題有一些小細節要處理,一個是前導0要消除,一個是最後數字的個數要保證一定去掉k個元素。
參考程式碼:
class Solution { public: string removeKdigits(string num, int k) { string res = ""; int n = k,cnt=0; for (auto c : num) { while (!res.empty() && n > 0 && c < res.back()) { res.pop_back(); n--; } res.push_back(c); } while (res[cnt] == '0') cnt++; res = res.substr(cnt, num.size() - k - cnt); return res.empty() ? "0" : res; } };