#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXLEN 100001 char *removeDuplicateLetter(char *str) { int map[26], len = (int) strlen(str); char *res = (char *) malloc(len + 1); memset(map, 0, sizeof(int) * 26); for (int i = 0; i < len; i++) { map[str[i] - 'a']++; } int l = 0, r = 0, index = 0; while (r < len) { if (map[str[r] - 'a'] == -1 || --map[str[r] - 'a'] > 0) { r++; continue; } int pick = -1; for (int i = l; i <= r; i++) { if (map[str[i] - 'a'] != -1 && (pick == -1 || str[i] < str[pick])) pick = i; } res[index++] = str[pick]; for (int i = pick + 1; i <= r; i++) { if (map[str[i] - 'a'] != -1) map[str[i] - 'a']++; } map[str[pick] - 'a'] = -1; l = pick + 1; r = l; } res[index] = '\0'; return res; } int main(void) { char str[MAXLEN], *res; scanf("%s", str); res = removeDuplicateLetter(str); printf("%s", res); free(res); return 0; }