在字符串中找出連續最長的數字串


輸入描述:

輸入一個字符串。

輸出描述:

輸出字符串中最長的數字字符串和它的長度。

輸入例子:
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 }

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM