输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度。
输入例子:
abcd12345ed125ss123058789,
如果有重复的最大长度的数字串,则一起输出,如1456jk4789,输出14564789,4
输出例子:
123058789,9
思路:先把字符串中的数字串取出来,然后取出长度最大的数字字串并输出,刚开始我使用HashMap的key存储数字字串,value存字串长度,考虑到HashMap存储无序,故改为LInkedHashMap,然后根据Map的value值排序,取出value值最大的map元素并输出,但是忽略一个特殊情况,就是当最大子串有若干个且相同,则map由于key不能重复,只会存储一个,故有缺陷,但是却被AC,后来使用list来存储,解决了此问题并被AC,先上有缺陷代码:
1 import java.util.ArrayList;
2 import java.util.Collections;
3 import java.util.Comparator;
4 import java.util.Iterator;
5 import java.util.LinkedHashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Map.Entry;
9 import java.util.Scanner;
10 import java.util.Set;
11
12 public class Test10 {
13
14 public static void main(String[] args) {
15 Scanner sc =
new Scanner(System.in);
16 while (sc.hasNext()) {
17 String s =
sc.next();
18 Map<String,Integer> mp =
new LinkedHashMap<String,Integer>();
//使用Linked哈希保证元素的有序性
19 String s1 = s.replaceAll("[a-z]", " ");
//把字符串中的字母全部替换为空格
20 String[] str = s1.split(" ");
//以空格分割字符串
21 for (
int i = 0; i < str.length; i++) {
//把字符串中连续的数字串存至map中,其中key为数字串,value为数字串长度
22 if (str[i].length() != 0) {
//由于有连续空格,使用空格分割时会出现多个空子串,空子串不予考虑,故有此判断
23 if (str[i].charAt(0) != ' '
) {
24 mp.put(str[i], str[i].length());
25 }
26 }
27 }
28 //System.out.println(mp);
29 //System.out.println("-------");
30
31 List<Map.Entry<String, Integer>> li =
new ArrayList<Map.Entry<String,Integer>>();
//用来存储Map.Entry<String, Integer>类型
32 Set<Entry<String, Integer>>se = mp.entrySet();
//获得map的Map.Entry<String, Integer>类型
33 Iterator<Entry<String, Integer>> it =
se.iterator();
34 while(it.hasNext()){
//把Map.Entry<String, Integer>类型元素存入list中,以便排序
35 Entry<String, Integer> en =
it.next();
36 li.add(en);
37 //System.out.println(en);
38 }
39 //System.out.println("-------");
40 Collections.sort(li,
new Comparator<Entry<String, Integer>>() {
//使用Collections集合工具类对list中Entry类型元素按照value进行自然升序排序
41
42 @Override
43 public int compare(Entry<String, Integer>
o1,
44 Entry<String, Integer>
o2) {
45 // TODO Auto-generated method stub
46 return o1.getValue().compareTo(o2.getValue());
47 }
48 });
49
50 //Iterator<Entry<String, Integer>> it1 = se.iterator();
51 //while(it1.hasNext()){
52 //System.out.println(it1.next());
53 // }
54 //System.out.println("-------");
55
56
57 StringBuffer sb =
new StringBuffer();
//用来存储长度最大且相等的数字串
58 for(
int i=0;i<li.size();i++
){
59 if(li.get(li.size()-1).getValue()==
li.get(i).getValue()){
60 sb.append(String.valueOf(li.get(i).getKey()));
61 }
62 }
63 System.out.println(sb+","+li.get(li.size()-1
).getValue());
64 }
65 }
66 }
上面代码如果输入时1234hj1234,则不会输出正确结果12341234,4 ,会输出1234,4,下面使用list
1 import java.util.ArrayList;
2 import java.util.Collections;
3 import java.util.Comparator;
4 import java.util.List;
5 import java.util.Scanner;
6
7 public class Test11 {
8
9 public static void main(String[] args) {
10 Scanner sc =
new Scanner(System.in);
11 while (sc.hasNext()) {
12 String s =
sc.next();
13 List<String> li =
new ArrayList<String>
();
14 String s1 = s.replaceAll("[a-z]", " ");
// 把字符串中的字母全部替换为空格
15 String[] str = s1.split(" ");
// 以空格分割字符串
16 for (
int i = 0; i < str.length; i++) {
// 把字符串中连续的数字串存至map中,其中key为数字串,value为数字串长度
17 if (str[i].length() != 0) {
// 由于有连续空格,使用空格分割时会出现多个空子串,空子串不予考虑,故有此判断
18 if (str[i].charAt(0) != ' '
) {
19 li.add(str[i]);
20 }
21 }
22 }
23
24 Collections.sort(li,
new Comparator<String>
() {
25
26 @Override
27 public int compare(String o1, String o2) {
//这里根据list中的字符串元素长度大小进行自然排序
28 // TODO Auto-generated method stub
29 return Integer.valueOf(o1.length()).compareTo(
30 Integer.valueOf(o2.length()));
31 }
32 });
33 StringBuffer sb =
new StringBuffer();
//用来存储长度最大且相等的数字串
34 for (
int i = 0; i < li.size(); i++
) {
35 if (li.get(i).length() == li.get(li.size() - 1
).length()) {
36 sb.append(li.get(i));
37 }
38 }
39
40 System.out.println(sb + "," + li.get(li.size() - 1
).length());
41 }
42 }
43 }
转载于:https://www.cnblogs.com/crazybuddy/p/5396554.html