1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public String removeDuplicateLetters(String s) {
int[] countMap = new int[26]; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); countMap[c - 'a']++; }
StringBuilder sb = new StringBuilder(); boolean[] exists = new boolean[26];
for (int i = 0; i < s.length(); i++) { char c = s.charAt(i);
if (!exists[c - 'a']) { while (sb.length() > 0 && c < sb.charAt(sb.length() - 1) && countMap[sb.charAt(sb.length() - 1) - 'a'] > 0) { char pop = sb.charAt(sb.length() - 1); sb.deleteCharAt(sb.length() - 1); exists[pop - 'a'] = false; }
sb.append(c); exists[c - 'a'] = true; }
countMap[c - 'a']--; }
return sb.toString(); } }
|
References
316. Remove Duplicate Letters
1081. Smallest Subsequence of Distinct Characters