京东笔试第一题括号没时间做,师弟的答案

import java.util.*;

public class Main {

	static Map<List<String>, Integer> mapSeqNum=new HashMap<List<String>, Integer>();
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner in = new Scanner(System.in 

);
		String str=in.next();
		while (str!=null){
			int num=count(new ArrayList<String>(Arrays.asList(str.split(""))).subList(1,str.length()+1));
			System.out.println(num);
			//System.out.println(new ArrayList<String>(Arrays.asList(str.split(""))).subList(1,str.length()+1));
			str=in.next();
		}
		in.close();
		
//		System.out.println(isTrue(Arrays.asList(str.split(""))));
	}
	
	public static int count(List<String> seq) {
		if(mapSeqNum.containsKey(seq)){
			return mapSeqNum.get(seq);
		}
		if (seq.size()==2 && seq.get(0).equals("(") && seq.get(1).equals(")")) {
			return 1;
		}else {
			int numSum=0;
			String str0=seq.get(0);
			seq.remove(0);
			for (int i = 0; i < seq.size(); i++) {
				String str1=seq.get(i);
				if (str1.equals(")")) {
					seq.remove(i);
					//System.out.println(isTrue(seq));
					if(isTrue(seq)){
						numSum+=count(seq);
						
					}
					seq.add(i, str1);
				}
				
			}
			seq.add(0, str0);
			mapSeqNum.put(seq, numSum);
			return numSum;
		}
	}
	
	public static boolean isTrue(List<String> tmpseq) {
		List<String> seq=new ArrayList<String>(tmpseq);
//		while (seq.size()>0) {
			for (int i = seq.size()-1; i >=0; i--) {
				if(seq.get(i).equals("(")){
					if(i<seq.size()-1 && seq.get(i+1).equals(")")){
						seq.remove(i+1);
						seq.remove(i);
						//System.out.println(seq);
//						break;
					}else {
						
						return false;
					}
				}
			}
			if(seq.size()==0){
				return true;
			}else {
				return false;
			}
			
//		}
//		return true;
	}

}

师弟解决的,惭愧惭愧。没有在线测试,考试结束后完成的。有问题欢迎指正。

全部评论
S = raw_input() result=1 stack=[] for i in range(len(S)): if S[i]=='(': stack.append('(') elif S[i]==')': result *=len(stack) stack.pop() print(result)
点赞
送花
回复 分享
发布于 2017-09-08 21:59
写的好复杂……
点赞
送花
回复 分享
发布于 2017-09-08 21:48
国泰君安
校招火热招聘中
官网直投
我也和你写的差不多一样多,别人7.8行搞定,好羞愧
点赞
送花
回复 分享
发布于 2017-09-08 21:53
item = input() cnt = 0 ans = 1 for i in item: if i == "(": cnt += 1 else: ans *= cnt cnt -= 1 print(ans 仿照牛妹的用py写的,不过没看懂怎么实现的
点赞
送花
回复 分享
发布于 2017-09-08 21:58
import java.util.HashMap; import java.util.Scanner; public class Main { private static HashMap<String, Integer> map = new HashMap<>(); public static void main(String[] args) { map.put("()", 1); Scanner in = new Scanner(System.in); String string = in.nextLine(); System.out.print(count(string)); in.close(); } private static int count(String s) { if (s.equals("")) { return 0; } int count = 0; if (map.containsKey(s)) { return map.get(s); } for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ')') { String temp = s.substring(1, i) + s.substring(i + 1, s.length()); if (temp.startsWith("(") && temp.endsWith(")")) { count += count(temp); } } } map.put(s, count); return count; } }
点赞
送花
回复 分享
发布于 2017-09-08 22:05

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务