单调栈处理字符串去重
给你一个字符串s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入:s = "bcabc"
输出:"abc"
示例 2:
输入:s = "cbacdcbc"
输出:"acdb"
提示:
1 <= s.length <= 104
s 由小写英文字母组成
https://leetcode.cn/problems/remove-duplicate-letters/
import java.util.Stack; public class RemoveDuplicateSolution { public static void main(String[] args) { String s = "bcabc"; System.out.println(removeDuplicateLetters(s)); s = "cbacdcbc"; System.out.println(removeDuplicateLetters(s)); } public static String removeDuplicateLetters(String s) { Stack<Character> stack = new Stack<>(); int[] count = new int[512]; for (char c : s.toCharArray()) { count[c]++; } for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); count[c]--; if (stack.size() != 0) { if (stack.contains(c)) { continue; } while (!stack.isEmpty() && c < stack.peek() && count[stack.peek()] > 0) { stack.pop(); } } stack.push(c); } StringBuffer sb = new StringBuffer(); for (char c : stack) { sb.append(c); } return sb.toString(); } }

浙公网安备 33010602011771号