题目描述
给定一个字符串,字符串包含数字、大小写字母以及括号(包括大括号、中括号和小括号),括号可以嵌套,即括号里面可以出现数字和括号。
按照如下的规则对字符串进行展开,不需要考虑括号成对不匹配问题,用例保证括号匹配,同时用例保证每个数字后面都有括号,不用考虑数字后面没有括号的这种情况,即2a2(b)这种情况不用考虑。
1)数字表示括号里的字符串重复的次数,展开后的字符串不包含括号。
2)将字符串进行逆序展开。
输出最终展开的字符串。
输入描述
输入一个长度小于100的字符串。
输出描述
输出展开后的字符串。
示例
输入
abc3(A)
输出
AAAcba
解法一:压栈法
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(reverseInStack(str));
}
public static String reverseInStack(String str) {
Stack<Character> stack = new Stack<>();
ArrayList<Character> list = new ArrayList<>();
//把大括号和中括号全部替换为小括号;
str = str.replace('{','(').replace('}', ')');
str = str.replace('[','(').replace(']', ')');
char[] chars = str.toCharArray();
int i=0;
while(true) {
//入栈直到遇到第一个右括号;
while(i < chars.length && chars[i]!=')') {
stack.push(chars[i]);
i++;
}
//出栈直到遇到最近的左括号,并依次倒入表中;
while(stack.peek()!='(') {
list.add(stack.pop());
if(stack.empty()) break;
}
if(stack.empty()) break;
//左括号出栈;
stack.pop()