import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
public String decodeStrin(String s) {
Stack<Integer> numStack = new Stack<>(); // 用于存放重复次数的栈
Stack<String> strStack = new Stack<>(); // 用于存放子字符串的栈
String currStr = ""; // 当前处理的子字符串
int currNum = 0; // 当前的重复次数
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) { // 如果是数字字符
currNum = (c - '0'); // 计算重复次数
} else if (c == '{') { // 如果是左括号
numStack.push(currNum); // 将当前的重复次数入栈
strStack.push(currStr); // 将当前的子字符串入栈
currNum = 0; // 重置重复次数
currStr = ""; // 重置子字符串
} else if (c == '}') { // 如果是右括号
String tmp = currStr; // 备份当前子字符串
for (int i = 1; i < numStack.peek(); i++) { // 根据重复次数进行拼接
currStr += tmp;
}
numStack.pop(); // 弹出栈顶的重复次数
currStr = strStack.peek() + currStr; // 将当前子字符串与栈顶的子字符串拼接
strStack.pop(); // 弹出栈顶的子字符串
} else {
currStr += c; // 非括号字符直接拼接到当前子字符串
}
}
return currStr; // 返回最终的解码结果
}
}
本题知识点分析:
1.栈的出栈和入栈
2.数学模拟
3.字符串拼接
本题解题思路分析:
1.遇到数字,计算重复次数
2.遇到左括号,此时放入重复次数的数字和子字符串,然后重置为0和空字符串
3.遇到右括号,计算重复次数,然后拼接字符串,将当前子字符串和栈顶的字符串进行连接,然后分别对数字和字符串出栈。
4.如果遇到单个字符,直接拼接到子字符串

京公网安备 11010502036488号