This commit is contained in:
2025-09-15 21:12:04 +08:00
commit 3f58f483ff
144 changed files with 5298 additions and 0 deletions

31
greed/316.h Normal file
View File

@@ -0,0 +1,31 @@
#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;
}