102 lines
2.9 KiB
Java
102 lines
2.9 KiB
Java
|
//给出一个字符串 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 中只有小写英文字母和括号
|
|||
|
// 我们确保所有括号都是成对出现的
|
|||
|
//
|
|||
|
// Related Topics 栈
|
|||
|
// 👍 75 👎 0
|
|||
|
|
|||
|
package leetcode.editor.cn;
|
|||
|
|
|||
|
import java.util.Stack;
|
|||
|
|
|||
|
//1190:反转每对括号间的子串
|
|||
|
public class ReverseSubstringsBetweenEachPairOfParentheses {
|
|||
|
public static void main(String[] args) {
|
|||
|
//测试代码
|
|||
|
Solution solution = new ReverseSubstringsBetweenEachPairOfParentheses().new Solution();
|
|||
|
//dcba
|
|||
|
System.out.println(solution.reverseParentheses("(abcd)"));
|
|||
|
//iloveu
|
|||
|
System.out.println(solution.reverseParentheses("(u(love)i)"));
|
|||
|
//leetcode
|
|||
|
System.out.println(solution.reverseParentheses("(ed(et(oc))el)"));
|
|||
|
//apmnolkjihgfedcbq
|
|||
|
System.out.println(solution.reverseParentheses("a(bcdefghijkl(mno)p)q"));
|
|||
|
}
|
|||
|
|
|||
|
//力扣代码
|
|||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
|||
|
class Solution {
|
|||
|
public String reverseParentheses(String s) {
|
|||
|
StringBuilder result = new StringBuilder();
|
|||
|
Stack<String> stack = new Stack<>();
|
|||
|
for (int i = 0; i < s.length(); i++) {
|
|||
|
String str = s.substring(i, i + 1);
|
|||
|
if (")".equals(str)) {
|
|||
|
StringBuilder temp = new StringBuilder();
|
|||
|
while (!"(".equals(stack.peek())) {
|
|||
|
temp.append(new StringBuilder(stack.pop()).reverse());
|
|||
|
}
|
|||
|
if ("(".equals(stack.peek())) {
|
|||
|
stack.pop();
|
|||
|
}
|
|||
|
if (stack.isEmpty()) {
|
|||
|
result.append(temp);
|
|||
|
} else {
|
|||
|
stack.push(temp.toString());
|
|||
|
}
|
|||
|
} else if (stack.isEmpty() && !"(".equals(str)) {
|
|||
|
result.append(str);
|
|||
|
} else {
|
|||
|
stack.push(str);
|
|||
|
}
|
|||
|
}
|
|||
|
if (stack.size() == 1) {
|
|||
|
return stack.pop();
|
|||
|
}
|
|||
|
while (!stack.isEmpty()) {
|
|||
|
result.append(new StringBuilder(stack.pop()).reverse());
|
|||
|
}
|
|||
|
return result.toString();
|
|||
|
}
|
|||
|
}
|
|||
|
//leetcode submit region end(Prohibit modification and deletion)
|
|||
|
|
|||
|
}
|