mirror of
https://git.wolves.top/wolves/leetcode.git
synced 2025-11-05 01:36:32 +08:00
init
This commit is contained in:
31
greed/316.h
Normal file
31
greed/316.h
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user