标签:
Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.
Example:
Given "bcabc"
Return "abc"
Given "cbacdcbc"
Return "acdb"
class Solution { public: string removeDuplicateLetters(string s) { int ahead[256] = {}; //直接定义256,不用减‘a’了 for (char c : s) ahead[c]++; //统计每个数出现的次数 string result = " "; bool inresult[256] = {}; //记录是否出现过这个值了 for (char c : s) { //从头开始扫描 ahead[c]--; //每出现一次就-- if (inresult[c]) //如果已经记录过了就跳过 continue; //如果当前值,比结果的最后一个值小,并且结果的最后值的计数大于0(后面还有) //则把最后一个值弹出,并把它的状态变为false while (c < result.back() && ahead[result.back()]) { inresult[result.back()] = false; result.pop_back(); } result += c; inresult[c] = true; } return result.substr(1); //第一个为空格;使用一个空格的原因是back()函数必须里面有值 } };
标签:
原文地址:http://www.cnblogs.com/dylqt/p/5072568.html