地址:

316. 去除重复字母

状态:看题解AC

遇到一个新字符,如果比栈顶小,并且在新字符后面还有和栈顶一样的 就把栈顶的字符抛弃了

代码:

  1. class Solution {
  2. public:
  3. string removeDuplicateLetters(string s) {
  4. vector<int> vis(26), num(26);
  5. for (char ch : s) {
  6. num[ch - 'a']++;
  7. }
  8. string stk;
  9. for (char ch : s) {
  10. if (!vis[ch - 'a']) {
  11. while (!stk.empty() && stk.back() > ch) {
  12. if (num[stk.back() - 'a'] > 0) {
  13. vis[stk.back() - 'a'] = 0;
  14. stk.pop_back();
  15. } else {
  16. break;
  17. }
  18. }
  19. vis[ch - 'a'] = 1;
  20. stk.push_back(ch);
  21. }
  22. num[ch - 'a'] -= 1;
  23. }
  24. return stk;
  25. }
  26. };