package test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; // 查找字符串中相同連續字符串最多的子串,如果有兩串長度相同取asc碼 例如1233455 中是33 /* 思路:新建一個map和字符數組,map中key為字符,value為連續字符個數;當第一次出現字符時,將字符存入map,value值為1,
如果map中已存在key,判斷其值是否與前一個字符連續,如果連續,value加一,如果不連續,判斷與后面字符是否連續,
判斷連續個數,將連續個數存到map的value中,並將比較位置轉移到最后一個連續位置,再次比較下一個字符在map是否存在
直至遍歷完成。遍歷完成后數組將會存儲到所有不同的字符,將數組排序,通過有序數組遍歷,找出map中value最大的數,
對有序序列遍歷,保證找到的最大有序序列是ASCII碼是是value中最小的。 */ public class Main { @SuppressWarnings("resource") public static void main(String[] args) { // 輸入字符串,賦值到str中 Scanner sc = new Scanner(System.in); String str = sc.next(); Map<String, Integer> map = new HashMap<String, Integer>(); List<String> l = new ArrayList<String>(); for (int i = 0; i < str.length(); i++) { // 該字符已出現過 if (map.containsKey(str.charAt(i) + "")) { // 是連續出現的 if (i > 0 && str.charAt(i) == str.charAt(i - 1)) { map.put(str.charAt(i) + "", map.get(str.charAt(i) + "") + 1); } else { // 非連續出現的 int tmp = 0; // 查找后面是否連續 for (int j = i; j < str.length(); j++) { if (str.charAt(j) == str.charAt(i)) { tmp++; } else { break; } } // 判斷后面連續個數和map中存儲的個數是否相同 if (map.get(str.charAt(i) + "") < tmp) { map.put(str.charAt(i) + "", tmp); } // 將i賦值到最后一個連續的位置 i += tmp - 1; } } else { // 該字符第一次出現 l.add(str.charAt(i) + ""); map.put(str.charAt(i) + "", 1); } } // l排個序 l=bubble(l); // quickSort(l, 0, l.size() - 1); // 查找有序序列中連續個數最多的字符 int max = 0; String maxStr = ""; for (int i = 0; i < l.size(); i++) { String s = l.get(i); if (max < map.get(s)) { max = map.get(s); maxStr = s; } } // 將子串長度最長的打印出來 String result = ""; for (int i = 0; i < max; i++) { result += maxStr; } System.out.println(result); } //冒泡排序 public static List<String> bubble(List<String> l) { for (int i = 0; i < l.size(); i++) { for (int j = i; j < l.size(); j++) { if (l.get(i).charAt(0) > l.get(j).charAt(0)) { String k = l.get(i); l.set(i, l.get(j)); l.set(j, k); } } } return l; } //快排 public static void quickSort(List<String> l, int start, int end) { int i = start, j = end; char tmp; if (start < end) { tmp = l.get(start).charAt(0); while (i != j) { while (j > i && l.get(j).charAt(0) >= tmp) { j--; } l.set(i, l.get(j)); while (i < j && l.get(i).charAt(0) <= tmp) { i++; } l.set(j, l.get(i)); } l.set(i, tmp + ""); quickSort(l, start, i - 1); quickSort(l, i + 1, end); } } }