| 12345678910111213141516171819202122232425262728293031 |
- #include <string.h>
- #include <stdlib.h>
- char* removeDuplicateLetters(char* s) {
- int vis[26], num[26];
- memset(vis, 0, sizeof(vis));
- memset(num, 0, sizeof(num));
- int n = strlen(s);
- for (int i = 0; i < n; i++) {
- num[s[i] - 'a']++;
- }
- char* stk = (char*)malloc(sizeof(char) * 27);
- int stkTop = 0;
- for (int i = 0; i < n; i++) {
- if (!vis[s[i] - 'a']) {
- while (stkTop > 0 && stk[stkTop - 1] > s[i]) {
- if (num[stk[stkTop - 1] - 'a'] > 0) {
- vis[stk[--stkTop] - 'a'] = 0;
- } else {
- break;
- }
- }
- vis[s[i] - 'a'] = 1;
- stk[stkTop++] = s[i];
- }
- num[s[i] - 'a'] -= 1;
- }
- stk[stkTop] = '\0';
- return stk;
- }
|