Java实现 LeetCode 301 删除无效的括号
2024-08-27 17:46:18
301. 删除无效的括号
删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。
说明: 输入可能包含了除 ( 和 ) 以外的字符。
示例 1:
输入: “()())()”
输出: ["()()()", “(())()”]
示例 2:
输入: “(a)())()”
输出: ["(a)()()", “(a())()”]
示例 3:
输入: “)(”
输出: [""]
class Solution {
public List<String> removeInvalidParentheses(String s) {
int left = 0, right = 0;
char[] cs = s.toCharArray();
for(char c : cs) {
if(c == '(') {
left++;
}else if(c == ')') {
if(left == 0) right++;
else left--;
}
}
List<String> res = new ArrayList<>();
backtrace(cs, 0, new StringBuilder(s.length()-left-right), res, 0, 0, left, right);
return res;
}
private void backtrace(char[] cs, int cur, StringBuilder sb, List<String> res,
int left, int right, int remL, int remR) {
if(cur == cs.length) {
if(remL == 0 && remR == 0) res.add(sb.toString());
return;
}
if(right > left) return;
final int len = sb.length();
if(cs[cur] == '(') {
// use
sb.append('(');
backtrace(cs, cur+1, sb, res, left+1, right, remL, remR);
sb.setLength(len);
if(remL > 0) { // not use
while(cur < cs.length && cs[cur] == '(') { // find next
cur++;
remL--;
}
if(remL >= 0) backtrace(cs, cur, sb, res, left, right, remL, remR);
}
}else if(cs[cur] == ')') {
// use
sb.append(')');
backtrace(cs, cur+1, sb, res, left, right+1, remL, remR);
sb.setLength(len);
if(remR > 0) { // not use
while(cur < cs.length && cs[cur] == ')') { // find next
cur++;
remR--;
}
if(remR >= 0) backtrace(cs, cur, sb, res, left, right, remL, remR);
}
}else {
sb.append(cs[cur]);
backtrace(cs, cur+1, sb, res, left, right, remL, remR);
sb.setLength(len);
}
}
}
最新文章
- Java之多线程开发时多条件Condition接口的使用
- python property详解
- Bzoj3663/4660 CrazyRabbit
- 浏览器兼容性之JavaScript篇
- Codeforces Round #379 (Div. 2) A. Anton and Danik 水题
- 扩展Date的DateDiff方法--日期差
- ExtJS4.2.1自定义主题(theme)样式详解
- 页面性能测试&;提升方式
- Linux流量监控工具 - iftop (最全面的iftop教程)
- uva315(求割点数目)
- HDU 3265 Posters ——(线段树+扫描线)
- 如何通过Git将写好的项目发布到github上
- navicat premium 破解版
- //生成四位数的验证码--->;
- Sql Server用户名和登录名的关系总结
- Mabatis中#{}和${}的区别
- Android studio jni
- PyQt5编程:鼠标事件
- if函数判断日期在某个时间段
- 如何实现一个IOS网络监控组件
热门文章
- Linux 内核工作队列之work_struct 学习总结
- mongodb windows 集群搭建
- 业务系统请求zabbix图表性能调优
- activiti工作流入门学习
- linux-Curl error (37): Couldn&#39;t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64 [Couldn&#39;t open file /e tc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64]
- Date工具遇到的一个坑
- linux下获取软件源码包 centos/redhat, debian/ubuntu
- Java创建线程的方式
- P1880 [NOI1995]石子合并 区间dp
- flask之Flask特殊装饰器