描述
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。
数据范围:字符串长度 1 \le n \le 200 \1≤n≤200 , 保证每组输入都至少含有一个数字
输入描述:
输入一个字符串。1<=len(字符串)<=200
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。
思路:
1、首选获取到最长数字是多少。
2、从map里获取最长数字有哪些。
3、再根据下标排序。
/**
输入:
abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2
复制
输出:
123058789,9
729865,2
复制
说明:
样例一最长的数字子串为123058789,长度为9
样例二最长的数字子串有72,98,65,长度都为2
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String s = scanner.nextLine();
String sc = "";
String scZ = "";
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); ) {
if ('0' <= s.charAt(i) && s.charAt(i) <= '9') {
sc += s.charAt(i);
i++;
} else {
if (scZ.length() > sc.length()) {
scZ = scZ;
} else {
scZ = sc;
}
map.put(scZ, scZ.length());
sc = "";
i++;
}
}
if (scZ.length() > sc.length()) {
scZ = scZ;
} else {
scZ = sc;
}
map.put(scZ, scZ.length());
List<String> stringList1 = new ArrayList<>();
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> next = iterator.next();
if (next.getValue() == scZ.length()) {
stringList1.add(next.getKey());
}
}
// 根据下标来 排序
String value2 = "";
Map<Integer, String> sortMap = new TreeMap<>();
for (int i = 0; i < stringList1.size(); i++) {
sortMap.put(s.indexOf(stringList1.get(i)), stringList1.get(i));
}
Iterator<Map.Entry<Integer, String>> iteratorSort = sortMap.entrySet().iterator();
while (iteratorSort.hasNext()) {
Map.Entry<Integer, String> next = iteratorSort.next();
value2 += next.getValue();
}
System.out.println(value2 + "," + scZ.length());
}