京东括号

不知道对不对,后面才想到的局面这一个词,但是觉得这样会内存或者时间超限。
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<>();
	}
}

#安卓工程师#
全部评论

相关推荐

2025-12-17 17:53
门头沟学院 Web前端
海梨花:我之前面试也是问我非技术问题,问过我怎么统计北京出租车数量,不借助任何网络或者其他平台的帮助,有足够多的人可以帮忙
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务