京东括号
不知道对不对,后面才想到的局面这一个词,但是觉得这样会内存或者时间超限。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Main {
static int[] number;
static List<jumian> list = new ArrayList<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
number = new int[s.length()];
// String s = "()()()()";
delectParentheses(s, 0);
int sum = 1;
for (int i = 0; i < number.length; i++) {
if (number[i] == 0) {
break;
}
sum *= number[i];
}
System.out.println(sum);
}
private static void delectParentheses(String s, int k) {
// 创建局面
jumian jm = new jumian();
jm.k = k;
list.add(jm);
if (s.length() <= 1) {
return;
}
// 删除左括号
s = s.substring(1, s.length());
for (int i = 0; i < s.length(); i++) {
String temp = s.substring(0, i) + s.substring(i + 1, s.length());
if (isMatch(temp)) {// 符合条件
List<String> list2 = list.get(k).list1;
if (list2.contains(temp)) {
number[k] += 1;
continue;
}
list2.add(temp);
number[k] += 1;
delectParentheses(temp, k + 1);
}
}
}
public static boolean isMatch(String s) {
Stack<String> stack = new Stack<String>();
while (!s.isEmpty()) {
String hao = s.substring(0, 1);
s = s.substring(1);
if (hao.equals(")")) {
if (stack.isEmpty())
return false;
String leftChar = stack.pop();
if (hao.equals(")")) {
if (!leftChar.equals("("))
return false;
}
} else if (hao.equals("(")) {
stack.push(hao);
}
}
return stack.isEmpty();
}
static class jumian {
int k = 0;
public List<String> list1 = new ArrayList<>();
}
} #安卓工程师#