描述
给一个加密过的字符串解码,返回解码后的字符串。
加密方法是:k[c] ,表示中括号中的 c 字符串重复 k 次,例如 3[a] 解码结果是 aaa ,保证输入字符串符合规则。不会出现类似 3a , 3[3] 这样的输入。
数据范围:输出的字符串长度满足
分析
思路和逆波兰表达式的计算过程相似。分为两个栈:数栈,字符串栈。
- 遇到数字,获取数字,存在数栈nums中
- 遇到’[’,压入字符串栈
- 遇到’]’,弹出字符串栈中的内容,直到弹出’[’;弹出数栈的栈顶元素count,重复count次拼接字符串。
- 遇到其他情况,压入字符串栈
注意遇到’]'处理时,注意得到的字符串的顺序。
注意最后从字符串栈弹出字符串,拼接字符串的顺序。
2021-11-22解答
import java.util.*;
public class Solution {
public String decodeString (String s) {
Stack<String> str = new Stack<>();
Stack<Integer> nums = new Stack<>();
for(int i = 0; i < s.length();i++){
int num = 0;
if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
while(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
num = num