本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
一、题目描述
二、解题思路
题目不难,就是反反复复看了好多遍题目。
1.使用栈
单独分析一对括号():
(ab)--->ba
//反转括号内的字符串
分析多对括号():
(a(ab)b)--->(abab)--->baba
//先从最内部括号()开始反转,然后由内而外逐层根据括号()反转
代码实现
//已(a(ab)b)为例
class Solution {
public String reverseParentheses(String s) {
Deque<String> stack = new LinkedList<String>();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch == '(') {
//push("")
//push("a")
stack.push(sb.toString());
sb.setLength(0);
} else if (ch == ')') {
//第一次 ab--->ba
//第二次 abab--->baba
sb.reverse();
//第一次ba--->aba
//第二次baba--->baba
sb.insert(0, stack.pop());
} else {
//a--a--ab--aba--abab
sb.append(ch);
}
}
return sb.toString();
}
}
时间复杂度分析
循环*反转的复杂度,故时间复杂度为:
- O(n^2)
空间复杂度分析
栈中最多包含整个字符串,故空间复杂度为:
- O(n)
不晓得我讲清楚了没有,请大家多多指教。
今日打卡结束!