一.题目描述
给你一个字符串 s
,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
https://leetcode-cn.com/problems/remove-duplicate-letters/
二.代码
public String removeDuplicateLetters(String s) {
char[] charArray = s.toCharArray();
int[] count = new int[128];
for (int i = 0; i < charArray.length; i++) {
count[charArray[i]]++;
}
char[] stack = new char[charArray.length];
int j = -1;
boolean[] inStack = new boolean[128];
for (char c : charArray) {
count[c]--;
if (inStack[c]) {
continue;
}
while (j > -1 && stack[j] > c) {
if (count[stack[j]] == 0) {
break;
}
inStack[stack[j--]] = false;
}
stack[++j] = c;
inStack[c] = true;
}
return new String(stack, 0, j + 1);
}