Advertisement
md5kafka

Untitled

Feb 6th, 2023
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.27 KB | None | 0 0
  1. class Solution {
  2.     public String removeDuplicateLetters(String s) {
  3.         LinkedList<Character> stack = new LinkedList<>();
  4.  
  5.         Map<Character, Set<Integer>> map = new HashMap<>();
  6.         for(int i = 0; i < s.length(); i++) {
  7.             char c = s.charAt(i);
  8.             Set<Integer> set = map.getOrDefault(c, new HashSet<>());
  9.             set.add(i);
  10.             map.put(c, set);
  11.         }
  12.         LinkedList<Integer> indexStack  = new LinkedList<>();
  13.         boolean[] seen = new boolean[26];
  14.  
  15.         for(int i = 0; i < s.length(); i++) {
  16.             char c = s.charAt(i);
  17.             while( stack.size() > 0 &&  stack.peekLast() > c && map.get(stack.peekLast()).size() > 1 && !seen[c -'a']) {
  18.                 seen[stack.peekLast() -'a'] = false;
  19.                 map.get(stack.peekLast()).remove(indexStack.removeLast());
  20.                 stack.removeLast();
  21.             }
  22.             if(!seen[c -'a']) {
  23.                 stack.add(c);
  24.                 seen[c -'a'] = true;
  25.                 indexStack.add(i);
  26.             } else {
  27.                 map.get(c).remove(i);
  28.             }
  29.         }
  30.        
  31.         StringBuilder sb = new StringBuilder();
  32.         for(char c: stack) {
  33.             sb.append(c);
  34.         }
  35.         return sb.toString();
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement