From a31b0d7cdf7e0286816b9a46adfe65bad0341c6a Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 23 Aug 2024 22:56:22 +0200 Subject: [PATCH] =?UTF-8?q?java:=20add=20=C2=AB394.=20Decode=20String?= =?UTF-8?q?=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- java/decode-string.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 java/decode-string.java diff --git a/java/decode-string.java b/java/decode-string.java new file mode 100644 index 0000000..367d857 --- /dev/null +++ b/java/decode-string.java @@ -0,0 +1,35 @@ +import java.util.Stack; + +class Solution { + private record StackEntry(int count, StringBuilder str) { + @Override + public String toString() { + return new StringBuilder().repeat(str(), count()).toString(); + } + } + + public String decodeString(String s) { + var stack = new Stack(); + stack.push(new StackEntry(1, new StringBuilder())); + + int count = 0; + for (int i = 0; i < s.length(); ++i) { + var c = s.charAt(i); + + if (c == '[') { + stack.push(new StackEntry(count, new StringBuilder())); + count = 0; + } else if (c == ']') { + var last = stack.pop(); + stack.peek().str().append(last); + } else if (Character.isDigit(c)) { + count *= 10; + count += c - '0'; + } else { + stack.peek().str().append(c); + } + } + + return stack.pop().toString(); + } +}