mirror of
				https://git.wolves.top/wolves/leetcode.git
				synced 2025-11-04 17:26: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