数学求解之求出现次数最多的字母和次数

来源:互联网 发布:linux mysql命令大全 编辑:程序博客网 时间:2024/05/22 02:16

一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。〔金山公司面试题〕

import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.TreeSet;public class FindRepeatChar {public static void doString(String strInput) {char[] chars = strInput.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);Collections.sort(lists);System.out.println(lists);StringBuffer sb = new StringBuffer();for (int i = 0; i < lists.size(); i++) {sb.append(lists.get(i));}strInput = sb.toString();System.out.println(strInput);int max = 0;String maxString = "";ArrayList maxList = new ArrayList();for (Iterator its = set.iterator(); its.hasNext();) {String os = (String) its.next();int begin = strInput.indexOf(os);int end = strInput.lastIndexOf(os);int value = end - begin + 1;if (value > max && value > 1) {max = value;maxString = os;maxList.add(os);} else if (value == max) {maxList.add(os);}}System.out.println("出现最多的字符为:");for (int i = 0; i < maxList.size(); i++) {System.out.println(maxList.get(i) + "");}System.out.println("出现最多的次数为:" + max);}public static void main(String[] args) {String strInput = new String("aavzcadfdsfsdhshgWasdfasdf");doString(strInput);}}


上面的算法有问题:

下面是修改以后的:

import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.TreeSet;public class FindRepeatChar {    public static void doString(String strInput) {        char[] chars = strInput.toCharArray();        //去掉重复的字符串        TreeSet set = new TreeSet();        for (int i = 0; i < chars.length; i++) {                 set.add(String.valueOf(chars[i]));        }        System.out.println(set);        System.out.println(strInput);          int max = 0;         //获取每种字符串出现的次数,并求出最大的出现次数        HashMap<String,Integer> maps=new HashMap<String,Integer>();              for (Iterator its = set.iterator(); its.hasNext();) {            String os = (String) its.next();            int value=countToken(strInput,os);            if(value>max)            {                max=value;            }            maps.put(os, value);                   }               //把出现次数最大的放入List中        List maxList=new ArrayList();                for(Map.Entry<String,Integer> entry:maps.entrySet())        {            String key=entry.getKey();            Integer val=entry.getValue();            if(val==max )            {                maxList.add(key);            }                    }        System.out.println("出现最多的字符为:");        for (int i = 0; i < maxList.size(); i++) {            System.out.println(maxList.get(i) + "");        }        System.out.println("出现最多的次数为:" + max);    }    //获取出现次数    public static int countToken(String str, String token) {        int count = 0;        while (str.indexOf(token) != -1) {            count++;            str = str.substring(str.indexOf(token) + token.length());        }       // System.out.println(token + "出现的次数:" + count);        return count;    }    public static void main(String[] args) {        String strInput = new String("你是猪你是猪你是猪你是猪你是猪你是猪你是猪你是猪你是猪afdadfdasffafadsfdhjgfhjgfhfadsssssss");        doString(strInput);        doString("aavzcadfdsfsdhshgWasdfasdf");        doString("aasss");    }}


 

原创粉丝点击