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);
}
}
}