题目
我的题解
class Solution {
public String reverseParentheses(String s) {
ArrayList left = new ArrayList();
int leftIndex = 0;
int i = 0;
while (i < s.length()) {
char cur = s.charAt(i);
if (cur == '(') {
// 记录所有的左括号索引
left.add(i);
} else if (cur == ')') {
// 当出现右括号时,移除左括号索引中的最后一个值
leftIndex = (int) left.remove(left.size() - 1);
// 以左右括号为界分割字符串再拼接
s = s.substring(0, leftIndex) + reverseWords(s.substring(leftIndex + 1, i)) + s.substring(i + 1);
// 重新定义开始搜索的点,使其指向上一个字符
i -= 2;
}
i++;
}
return s;
}
// 反转括号中字符的方法
public String reverseWords(String s) {
StringBuilder ans = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
ans.insert(0, s.charAt(i));
}
return ans.toString();
}
}
其他题解 - 预处理括号
先读取整个字符串,存储所有括号的索引。然后再读取一遍,存储普通字符;遇到左括号就跳到对应右括号之前的字符,反向读取存储字符;再次读到左括号跳出当前括号层,反向,继续往下读。
查看解法链接解法二。
总结
- 果然字符串处理的高境界是就地修改啊~