关注
`` static String resolve(String expr) {
Stack stack1 = new Stack();
// 用来储存 右括号前的字符串长度 保证只反转括号内的内容
Stack<Integer> stack2 = new Stack<>();
StringBuilder res = new StringBuilder();
Map<Character, Character> stock = new HashMap<>();
stock.put(')', '(');
for (int i = 0; i < expr.length(); i++){
// 右括号入栈1
if (expr.charAt(i)== '('){
// 右括号入栈后 要先统计一下之前的字符串的长度 保证只反转括号内的字符
stack1.push(expr.charAt(i));
// 之所以使用栈的形式存储 因为也是先进后出的特点
stack2.push(res.toString().length());
}// 当为左括号时
else if(expr.charAt(i) == ')'){
// 先看栈1是否为空 如果栈1为空的话 返回空字符串 或者栈顶的括号不匹配
if (stack1.empty() || stack1.peek() != stock.get(expr.charAt(i))){
// 不符合条件返回空字符串
return "";
}
// 满足则弹出栈顶元素
stack1.pop();
// 当弹出一次左扩号时 反转一次字符串 这里有一点问题 并不应该反转所有的字符串
int length = stack2.pop();
// 括号内的字符
String str = res.substring(length, res.toString().length());
// 拼接字符串 得到反转操作的字符
res = new StringBuilder(res.substring(0, length)).append(new StringBuilder(str).reverse());
}else{
// 字母则拼接如字符
res.append(expr.charAt(i));
}
}
if (stack1.empty()){
return res.toString();
}
return "";
}
查看原帖
点赞 评论
相关推荐
昨天 14:30
门头沟学院 C++ 点赞 评论 收藏
分享
点赞 评论 收藏
分享
08-27 20:45
门头沟学院 算法工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 从顶到拉给所有面过的公司评分 #
13249次浏览 124人参与
# 机械人春招想让哪家公司来捞你? #
356873次浏览 3104人参与
# 为了求职,我做过的疯狂伪装 #
10396次浏览 171人参与
# 晒晒你的中秋福利 #
14721次浏览 91人参与
# 职场破冰,你们都聊什么? #
5940次浏览 58人参与
# 工作压力大怎么缓解 #
104737次浏览 1048人参与
# 机械人怎么评价今年的华为 #
208544次浏览 1524人参与
# bilibili求职进展汇总 #
84845次浏览 780人参与
# 广联达求职进展汇总 #
10651次浏览 50人参与
# 大家实习每天都在干啥 #
88663次浏览 517人参与
# 你面试被问到过哪些不会的问题? #
18603次浏览 731人参与
# 聊聊这家公司值得去吗 #
553393次浏览 3676人参与
# 秋招报数:你投了多少家公司? #
26190次浏览 264人参与
# 实习要如何选择和准备? #
114441次浏览 1436人参与
# 秋招OC许愿 #
345540次浏览 2523人参与
# 秋招的嫡长offer #
25614次浏览 247人参与
# 上班后和你想的一样吗? #
79124次浏览 630人参与
# 电网笔面经互助 #
46385次浏览 428人参与
# 你觉得早上几点上班合适? #
82269次浏览 329人参与
# 上班摸鱼,你都在干些什么? #
6013次浏览 103人参与