zoukankan      html  css  js  c++  java
  • 面试题在一个字符串中查找重复次数最多的字符(转)

    在一个字符串中可能包含a-z中的多个字符,如有重复,如String data = "shfksjgljsfsfs",求出现次数最多的那个字母及次数,如有多个重复的则求出。
    思路:
    1.引入TreeSet,通过集合快速找到所有出现的字符。
    2.引入ArrayList,为了快速排序,再通过StringBuffer生成排序后的字符串。
    3.通过String Api中基本方法, indexOf lastIndexOf来计算TreeSet中每个字符串出现的最大值。
    4.如果出现相同的则把相同的都记录在一个列表中。
    5.记录第一个出现次数最多的字符(为了计算多个字符串相同的情况)。
    6.计算最大字符串列表中哪些才是真正出现次数最多的。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.TreeSet;
    
    
    public class Test2 {
        public static void main(String args[]){
            String input = "adsfsafasdfjlfdjgkdf";
            new Test2().doString(input);
        }
    
        public void doString(String input){
            char[] chars = input.toCharArray();
            ArrayList lists = new ArrayList();
            TreeSet set = new TreeSet();
            for(int i=0;i<chars.length;i++){
                lists.add(String.valueOf(chars[i]));
                set.add(String.valueOf(chars[i]));
            }
            System.out.println(set); //set没有重复的元素
            Collections.sort(lists);
            System.out.println(lists); //sort排序
    
            StringBuffer sb = new StringBuffer();
            for(int i=0;i<lists.size();i++){
                sb.append(lists.get(i));
            }
            input = sb.toString();
            System.out.println(input);
            int max = 0;
            String maxString = "";
            ArrayList maxlist = new ArrayList();
    
            Iterator its = set.iterator();
            while(its.hasNext()){
                String os = (String)its.next();
                int begin = input.indexOf(os);
                int end = input.lastIndexOf(os);
                int value = end - begin + 1;
                if(value > max){
                    max = value;
                    maxString = os;
                    maxlist.add(os);
                }
                else if(value == max){
                    maxlist.add(os);
                }
            }
    
            int index = 0;
            for(int i=0;i<maxlist.size();i++){
                if(maxlist.get(i).equals(maxString)){
                    index = i;
                    break;
                }
            }
            System.out.println("出现最多的字符分别是:");
            for(int i=index;i<maxlist.size();i++){
                System.out.println(maxlist.get(i) + "  ");
            }
            System.out.println();
            System.out.println("出现最多的次数为" + max);
        }
    }
    
    

    作者:高级测试开发网
    博客地址:https://seniortesting.club
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    转 Wireshark和TcpDump抓包分析心得
    ubuntu tomcat的安装与配置
    好久之前就看到的,这次必须转了
    【1】记一次破解wifi
    aircrack加reaver破解带有wps的wifi
    hydra 密码破解工具详解
    树莓派上手常见问题处理[转]
    破解邻居家的wifi密码
    完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器
    Ubuntu中启用关闭Network-manager网络设置问题! 【Server版本】
  • 原文地址:https://www.cnblogs.com/seniortestingdev/p/2384339.html
Copyright © 2011-2022 走看看