zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在字符串中找出连续最长的数字串(算法)

算法 字符串 连续 最长 找出
2023-06-13 09:15:54 时间

描述

输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)

本题含有多组样例输入。

数据范围:字符串长度 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());
 
        }