From 8999e237027a55237511c65e6bec54bc024c8371 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Mon, 16 Sep 2024 19:49:11 +0800 Subject: [PATCH] 2024/9/16 LeetCode Hot100 Stack --- .../java/com/cool/hot100/stack/MinStack.java | 47 +++++++++++++++++++ .../java/com/cool/hot100/stack/Num394.java | 41 ++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/main/java/com/cool/hot100/stack/MinStack.java create mode 100644 src/main/java/com/cool/hot100/stack/Num394.java diff --git a/src/main/java/com/cool/hot100/stack/MinStack.java b/src/main/java/com/cool/hot100/stack/MinStack.java new file mode 100644 index 0000000..de7ce76 --- /dev/null +++ b/src/main/java/com/cool/hot100/stack/MinStack.java @@ -0,0 +1,47 @@ +package com.cool.hot100.stack; + +import java.util.Stack; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/16/13:55 + * DayNumber 1 + * Hard 2 + * Level 4 + * @Description LeetCode 151题 + */ +public class MinStack { + private Stack stack; + private Stack minStack; + + public MinStack() { + stack=new Stack<>(); + minStack=new Stack<>(); + } + + public void push(int val) { + stack.push(val); + if(minStack.isEmpty()||minStack.peek()>=val){ + minStack.push(val); + } + } + + public void pop() { + + if(stack.pop().equals(minStack.peek())){ + minStack.pop(); + } + } + + public int top() { + return stack.peek(); + } + + public int getMin() { + return minStack.peek(); + } + + +} diff --git a/src/main/java/com/cool/hot100/stack/Num394.java b/src/main/java/com/cool/hot100/stack/Num394.java new file mode 100644 index 0000000..fdd2083 --- /dev/null +++ b/src/main/java/com/cool/hot100/stack/Num394.java @@ -0,0 +1,41 @@ +package com.cool.hot100.stack; + +import java.util.Stack; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/16/17:52 + * DayNumber 2 + * Hard 2 + * Level 6 + */ +public class Num394 { + public String decodeString(String s) { + StringBuilder res = new StringBuilder(); + int multi = 0; + Stack multiStack = new Stack<>(); + Stack resStack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == '[') { + multiStack.push(multi); + multi = 0; + resStack.push(res.toString()); + res = new StringBuilder(); + } else if (c == ']') { + int currentMulti = multiStack.pop(); + StringBuilder temp = new StringBuilder(); + for (int i = 0; i < currentMulti; i++) { + temp.append(res); + } + res = new StringBuilder(resStack.pop() + temp); + } else if (c >= '0' && c <= '9') { + multi = multi * 10 + Integer.parseInt(c + ""); + } else { + res.append(c); + } + } + return res.toString(); + } +}