1
0

316.h 802 B

12345678910111213141516171819202122232425262728293031
  1. #include <string.h>
  2. #include <stdlib.h>
  3. char* removeDuplicateLetters(char* s) {
  4. int vis[26], num[26];
  5. memset(vis, 0, sizeof(vis));
  6. memset(num, 0, sizeof(num));
  7. int n = strlen(s);
  8. for (int i = 0; i < n; i++) {
  9. num[s[i] - 'a']++;
  10. }
  11. char* stk = (char*)malloc(sizeof(char) * 27);
  12. int stkTop = 0;
  13. for (int i = 0; i < n; i++) {
  14. if (!vis[s[i] - 'a']) {
  15. while (stkTop > 0 && stk[stkTop - 1] > s[i]) {
  16. if (num[stk[stkTop - 1] - 'a'] > 0) {
  17. vis[stk[--stkTop] - 'a'] = 0;
  18. } else {
  19. break;
  20. }
  21. }
  22. vis[s[i] - 'a'] = 1;
  23. stk[stkTop++] = s[i];
  24. }
  25. num[s[i] - 'a'] -= 1;
  26. }
  27. stk[stkTop] = '\0';
  28. return stk;
  29. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。