Java实现 LeetCode 301 删除无效的括号

Helena ·
更新时间:2024-11-13
· 819 次阅读

301. 删除无效的括号

删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。

说明: 输入可能包含了除 ( 和 ) 以外的字符。

示例 1:

输入: “()())()”
输出: ["()()()", “(())()”]
示例 2:

输入: “(a)())()”
输出: ["(a)()()", “(a())()”]
示例 3:

输入: “)(”
输出: [""]

class Solution { public List 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 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 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 = 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 = 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 leetcode 括号 301

需要 登录 后方可回复, 如果你还没有账号请 注册新账号