二、反转每对括号(Weekly Contest 154)

题目描述:
给出一个字符串 s(仅含有小写英文字母和括号)。

请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

注意,您的结果中 不应 包含任何括号。

示例 1:

输入:s = “(abcd)”
输出:“dcba”
示例 2:

输入:s = “(u(love)i)”
输出:“iloveu”
示例 3:

输入:s = “(ed(et(oc))el)”
输出:“leetcode”
示例 4:

输入:s = “a(bcdefghijkl(mno)p)q”
输出:“apmnolkjihgfedcbq”

提示:

0 <= s.length <= 2000
s 中只有小写英文字母和括号
我们确保所有括号都是成对出现的

很明显和括号有关的都基本上可以使用栈来解决

class Solution {
    public String reverseParentheses(String s) {
        Stack stack = new Stack<>();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < s.length(); i++) {
			char tem = s.charAt(i);
			if(tem == ')'){
				StringBuilder temBuilder = new StringBuilder();
				while (stack.peek() != '(') {
					temBuilder.append(stack.pop());
				}
				stack.pop();
				for (int j = 0; j < temBuilder.length() ; j++) {
					stack.push(temBuilder.charAt(j));
				}
			}else {
				stack.push(tem);
			}
		}
		
		while (!stack.isEmpty()) {
			sb.append(stack.pop());
		}
		
		return sb.reverse().toString();
    }
}

你可能感兴趣的:(竞赛)