给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。用Java实现
时间: 2024-02-03 22:15:37 浏览: 485
可以使用栈来解决这个问题。我们遍历输入字符串,如果当前字符是数字,则将数字字符转换为数字,并继续遍历获取完整的数字。如果当前字符是左方括号,则将数字入栈,并将数字清零。如果当前字符是右方括号,则将栈顶的数字弹出,并根据数字重复解码字符串,然后将解码后的字符串与栈顶的字符串合并。如果当前字符是字母,则将字母与栈顶的字符串合并。最终栈顶的字符串即为解码后的字符串。
Java代码如下:
```java
public String decodeString(String s) {
Stack<Integer> nums = new Stack<>();
Stack<String> strs = new Stack<>();
String str = "";
int num = 0;
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
num = num * 10 + c - '0';
} else if (c == '[') {
nums.push(num);
strs.push(str);
num = 0;
str = "";
} else if (c == ']') {
int repeat = nums.pop();
String prevStr = strs.pop();
str = prevStr + str.repeat(repeat);
} else {
str += c;
}
}
return str;
}
```
时间复杂度为O(n),空间复杂度为O(n),其中n为输入字符串的长度。
阅读全文