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

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

作者: 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