zoukankan      html  css  js  c++  java
  • JAVA 算法练习(三)

    拆解排序问题

    后缀子串排序

    题目:

    对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in,n,rain

    解题思路:

    先将字符串经行拆解,然后将拆解后的字符串进行字典顺序排序

    代码:

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static String[] sT(String s) {
            String[] result = new String[s.length()];
            for (int i = 0; i < s.length(); i++)
                result[i] = s.substring(i); // 从i到末尾截取字符串
            Arrays.sort(result); // 进行字典顺序排序
            return result;
        }
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNext()) {
                String s = sc.nextLine();
                String[] result = sT(s);
                for (String c : result) {
                    System.out.println(c);
                }
            }
        }
    }
    

    子串计算

    题目:

    给出一个01字符串(长度不超过100),求其每一个子串出现的次数。对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
    例如:10101 ,输出结果为:

    0 2
    01 2
    1 3
    10 2
    101 2
    

    解题思路:

    将字符串进行拆解,拆解方式不同于上一题,拆解结果为所有相邻的子串。再将拆解子串经行排序,然后输出。

    代码:

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNext()) {
                Map<String, Integer> count = new HashMap<>();
                String s = sc.nextLine();
                for (int i = 0; i < s.length(); i++) {
                    for (int j = i + 1; j <= s.length();j++) {
                        String temp = s.substring(i, j); // substring 范围(i—(j-1))
                        if (count.get(temp) == null) {  // 查看该子串是否出现过,否则将其以key值添加到map中,value值为1
                            count.put(temp, 1);
                        } else {
                            int value = count.get(temp); // 是则提取该key值的value值,并使value值加1
                            count.put(temp, ++value);
                        }
                    }
                }
                Collection<String> keys = count.keySet(); // 提取所有的key值
                List<String> list = new ArrayList<>(keys); 
                Collections.sort(list);  // 无第二个参数,默认升序
                for (String str : list) {
                    if (count.get(str) > 1) {
                        System.out.println(str + " " + count.get(str));
                    }
                }
            }
        }
    }
    

    附:吉他曲
    流星——岸部真明

    以上

  • 相关阅读:
    Sqlserver中一直在用又经常被忽略的知识点一
    PowerDesigner从Sqlserver中反转为带注释的字典及快捷键操作
    10.5 搜索的优化版
    每篇半小时1天入门MongoDB——1. MongoDB介绍和安装
    ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询
    Web项目从Oracle转为Mysql,fluentnhibernate-1.0和NHibernate2.1.0升级到NHibernate3.3的注意事项
    Mysql性能优化三(分表、增量备份、还原)
    Mysql性能优化二
    Mysql性能优化一
    Redis主从复制
  • 原文地址:https://www.cnblogs.com/mxwbq/p/7043681.html
Copyright © 2011-2022 走看看