美文网首页
字符串中求出现次数最多字符

字符串中求出现次数最多字符

作者: HWilliamgo | 来源:发表于2018-04-07 23:56 被阅读54次

    思路:

    • 引入TreeSet:通过集合快速找到所有出现的字符串
    • 引入ArrayList:为了快速排序,再通过StringBuilder生成排序后的字符串
    • 通过String api中的基本方法indexOf和lastIndexOf来计算TreeSet中每个字符串的最大值
    • 如果出现相同的,则把相同的都记录在一个列表中。
    • 记录第一个出现次数最多的字符(为了计算多个字符串相同情况)
    • 计算最大字符串列表中哪些才是真正出现次数最多的、
    import java.util.*;
    
    public class MainJava {
    
        public static void main(String[] args) throws Exception {
            String input = "aavacadfdsfsdhshgWasdfasdfdddaaa";
            System.out.println("the origin input is----" + input);
            new MainJava().doString(input);
        }
    
        public void doString(String input) {
            char[] chars = input.toCharArray();
            ArrayList<String> lists = new ArrayList<>();
            TreeSet<String> set = new TreeSet<>();
            for (int i = 0, length = chars.length; i < length; i++) {
                lists.add(String.valueOf(chars[i]));
                set.add(String.valueOf(chars[i]));
            }
            System.out.println(set);
            Collections.sort(lists);//将input字符串重排序
            System.out.println(lists);
    
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0, length = lists.size(); i < length; i++) {
                stringBuilder.append(lists.get(i));
            }
    
            input = stringBuilder.toString();
            System.out.println(input);//打印重排序后的字符串
            int max = 0;
            String maxString = "";
            ArrayList<String> maxList = new ArrayList<String>();
    
            Iterator it = set.iterator();//用Set的迭代器,刚好可以避免重复字符迭代的效率问题
            while (it.hasNext()) {
                String os = (String) it.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) {
                    //如果该字符刚好也是最大个数的字符,那么就添加进List记录就行。
                    maxList.add(os);
                }
            }
    
            int index = 0;
            for (int i = 0, len = maxList.size(); i < len; i++) {
                if (maxList.get(i).equals(maxString)) {
                    index = i;
                    break;
                }
            }
            System.out.println("max data");
            for (int i = index, len = maxList.size(); i < len; i++) {
                System.out.println(maxList.get(i) + "");
            }
            System.out.println();
            System.out.println("max" + max);
    
        }
    }
    

    相关文章

      网友评论

          本文标题:字符串中求出现次数最多字符

          本文链接:https://www.haomeiwen.com/subject/gkiuhftx.html