1. 程式人生 > >Remove K Digits 去除重複字母

Remove K Digits 去除重複字母

給定一個僅包含小寫字母的字串,去除字串中重複的字母,使得每個字母只出現一次。需保證返回結果的字典序最小(要求不能打亂其他字元的相對位置)。

示例 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;      
    }
};