Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static String removeDuplicateLetters(String s) {
- Stack<Character> T = new Stack<>();
- StringBuilder sb = new StringBuilder();
- int[] cnt = new int[26];
- boolean[] used = new boolean[26];
- //計算字母使用次數
- for (char c : s.toCharArray()) {
- cnt[c - 'a']++;
- }
- for (char c : s.toCharArray()) {
- cnt[c - 'a']--;
- if (used[c - 'a'] == true) //如果有使用過直接跳過去
- continue;
- //當stack非空且最先放的參數比較大,且目前這個使用次數還有
- while (!T.isEmpty() && T.peek() > c && cnt[T.peek() - 'a'] > 0) {
- used[T.peek() - 'a'] = false;
- T.pop();
- }
- T.push(c);
- used[c - 'a'] = true;
- }
- for (char c : T) {
- sb.append(c);
- }
- return sb.toString();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement