mirror of
https://git.wolves.top/wolves/leetcode.git
synced 2025-11-05 01:36:32 +08:00
32 lines
802 B
C
32 lines
802 B
C
#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;
|
|
}
|