From 7ab7f641a1cf6935bed72844d9f632b4cd7c33ed Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Fri, 23 Apr 2021 19:01:54 +0800 Subject: [PATCH] =?UTF-8?q?394:=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=A7=A3?= =?UTF-8?q?=E7=A0=81(=E6=9C=AA=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/leetcode/editor/cn/DecodeString.java | 80 +++++++++++++++++++ .../java/leetcode/editor/cn/DecodeString.md | 34 ++++++++ 2 files changed, 114 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/DecodeString.java create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/DecodeString.md diff --git a/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.java b/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.java new file mode 100644 index 0000000..9553540 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.java @@ -0,0 +1,80 @@ +//给定一个经过编码的字符串,返回它解码后的字符串。 +// +// 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 +// +// 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 +// +// 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 +// +// +// +// 示例 1: +// +// 输入:s = "3[a]2[bc]" +//输出:"aaabcbc" +// +// +// 示例 2: +// +// 输入:s = "3[a2[c]]" +//输出:"accaccacc" +// +// +// 示例 3: +// +// 输入:s = "2[abc]3[cd]ef" +//输出:"abcabccdcdcdef" +// +// +// 示例 4: +// +// 输入:s = "abc3[cd]xyz" +//输出:"abccdcdcdxyz" +// +// Related Topics 栈 深度优先搜索 +// 👍 741 👎 0 + +package leetcode.editor.cn; + +import java.util.Stack; + +//394:字符串解码 +public class DecodeString { + public static void main(String[] args) { + //测试代码 + Solution solution = new DecodeString().new Solution(); + //accaccacc + System.out.println(solution.decodeString("3[a2[c]]")); + //aaabcbc + System.out.println(solution.decodeString("3[a]2[bc]")); +// //accaccacc +// System.out.println(solution.decodeString("3[a2[c]]")); +// //abcabccdcdcdef +// System.out.println(solution.decodeString("2[abc]3[cd]ef")); +// //abccdcdcdxyz +// System.out.println(solution.decodeString("abc3[cd]xyz")); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public String decodeString(String s) { + Stack stack = new Stack<>(); + StringBuilder str = new StringBuilder(); + while (s.charAt(0) >= 'a' && s.charAt(0) <= 'z') { + str.append(s.charAt(0)); + if (s.length() == 1) { + return str.toString(); + } + s = s.substring(1); + } + int num = Integer.parseInt(s.substring(0, s.indexOf("["))); + for (int i = 0; i < num; i++) { + str.append(decodeString(s.substring(s.indexOf("[") + 1, s.lastIndexOf("]")))); + } + return str.toString(); + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.md b/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.md new file mode 100644 index 0000000..4ffe3b4 --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/DecodeString.md @@ -0,0 +1,34 @@ +

给定一个经过编码的字符串,返回它解码后的字符串。

+ +

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

+ +

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

+ +

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

+ +

 

+ +

示例 1:

+ +
输入:s = "3[a]2[bc]"
+输出:"aaabcbc"
+
+ +

示例 2:

+ +
输入:s = "3[a2[c]]"
+输出:"accaccacc"
+
+ +

示例 3:

+ +
输入:s = "2[abc]3[cd]ef"
+输出:"abcabccdcdcdef"
+
+ +

示例 4:

+ +
输入:s = "abc3[cd]xyz"
+输出:"abccdcdcdxyz"
+
+
Related Topics
  • 深度优先搜索
  • \n
  • 👍 741
  • 👎 0
  • \ No newline at end of file