diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2309a7c..a9d754e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,8 @@ - + + @@ -79,7 +80,7 @@ - + - - @@ -277,7 +278,10 @@ - + + + + 1580045439607 @@ -594,7 +598,14 @@ - @@ -687,35 +698,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -741,14 +752,14 @@ - + - - + + - + diff --git a/README.md b/README.md index 68407bd..4f03271 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ * [q20_有效的括号](/src/栈相关/q20_有效的括号) * [q224_基本计算器](/src/栈相关/q224_基本计算器) +* [q316_去除重复字母](/src/栈相关/q316_去除重复字母) ### 堆相关 diff --git a/src/栈相关/q316_去除重复字母/Solution.java b/src/栈相关/q316_去除重复字母/Solution.java new file mode 100644 index 0000000..53bc134 --- /dev/null +++ b/src/栈相关/q316_去除重复字母/Solution.java @@ -0,0 +1,28 @@ +package 栈相关.q316_去除重复字母; + +import java.util.Stack; + +/** + * 栈操作 o(n*log(n)) + */ +public class Solution { + + public String removeDuplicateLetters(String s) { + Stack stack = new Stack<>(); + for (int i = 0; i < s.length(); i++) { + Character c = s.charAt(i); + if (stack.contains(c)) { + continue; + } + while (!stack.isEmpty() && stack.peek() > c && s.indexOf(stack.peek(), i) != -1) { + stack.pop(); + } + stack.push(c); + } + String rs = ""; + for (int i = 0; i < stack.size(); i++) { + rs += stack.get(i); + } + return rs; + } +}