最长的顺子

时间:2025-04-10 10:32:34
//1、输入的牌 Scanner in = new Scanner(System.in); String ownList = in.nextLine(); String tableList =in.nextLine(); String all = ownList+ "-"+tableList; String[] all1 = all.split("-"); //2、 所有的牌 HashMap<String, Integer> map = new LinkedHashMap<>(); for (int i = 3; i <= 10; i++) { map.put(i+"",4); } map.put("J",4); map.put("Q",4); map.put("K",4); map.put("A",4); //3、剩下的牌(对方可能存在的牌) for (int i = 0; i < all1.length; i++) { String p= all1[i]; map.put(p,map.get(p)-1); } System.out.println("剩余牌==="+map); // JQKA转换为数字,方便判断连续 ArrayList<Integer> othersList = new ArrayList<>(); for (String s : map.keySet()) { if (map.get(s)!=0){ if(s.equals("J")){ othersList.add(11); }else if(s.equals("Q")){ othersList.add(12); }else if(s.equals("K")){ othersList.add(13); }else if(s.equals("A")){ othersList.add(14); }else { othersList.add(Integer.parseInt(s)); } } } // 4、判断剩下的牌,可以形成几个顺子, ArrayList<ArrayList<String>> reslutList = new ArrayList<>(); //滑动窗口,5为步长 for (int i = 0; i <= othersList.size()-5; i=i+5) { //判断连续 Boolean flag = true; for (int j = 1; j < 5; j++) { if (othersList.get(i+j) != othersList.get(i+j - 1)+1 ){ flag = false; } } // 如果 TRUE ,则可以形成顺子 ArrayList<String> sunList = new ArrayList<>(); if (flag){ for (int j = 0; j < 5; j++) { System.out.print(othersList.get(i+j)); String pai = othersList.get(i+j)+""; if(pai.equals("11")){ sunList.add("J"); }else if(pai.equals("12")){ sunList.add("Q"); }else if(pai.equals("13")){ sunList.add("K"); }else if(pai.equals("14")){ sunList.add("A"); }else { sunList.add(pai); } } reslutList.add(sunList); System.out.println("============"); } } System.out.println(reslutList); // 5、找到最大顺子 if (reslutList.size()!=0){ ArrayList<String> temp = new ArrayList<>(); temp.add("0"); for (List<String> value : reslutList ) { if (Integer.valueOf(value.get(0))>Integer.valueOf(temp.get(0))){ temp= (ArrayList<String>) value; } } for (String s : temp) { System.out.print(s); } }else { System.out.println("NO-CHAIN"); }