mirror of
				https://git.wolves.top/wolves/leetcode.git
				synced 2025-11-04 09:16: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;
 | 
						|
}
 |