Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. public static String removeDuplicateLetters(String s) {
  2. Stack<Character> T = new Stack<>();
  3. StringBuilder sb = new StringBuilder();
  4.  
  5. int[] cnt = new int[26];
  6. boolean[] used = new boolean[26];
  7. //計算字母使用次數
  8. for (char c : s.toCharArray()) {
  9. cnt[c - 'a']++;
  10. }
  11.  
  12. for (char c : s.toCharArray()) {
  13. cnt[c - 'a']--;
  14. if (used[c - 'a'] == true) //如果有使用過直接跳過去
  15. continue;
  16. //當stack非空且最先放的參數比較大,且目前這個使用次數還有
  17. while (!T.isEmpty() && T.peek() > c && cnt[T.peek() - 'a'] > 0) {
  18. used[T.peek() - 'a'] = false;
  19. T.pop();
  20. }
  21. T.push(c);
  22. used[c - 'a'] = true;
  23. }
  24.  
  25. for (char c : T) {
  26. sb.append(c);
  27. }
  28.  
  29. return sb.toString();
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement