论坛首页 Java企业应用论坛

面试题目

浏览 32984 次
锁定老帖子 主题:面试题目
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-27  
如果出现字母次数最多的是多个字母呢?
好些人把这种情况给忽略了
0 请登录后投票
   发表时间:2009-11-27   最后修改:2009-11-27

String str = "qqqqqaaaaa11aaxxrrrrrrr";// 需要统计的字符串
  char[] strchars = str.toCharArray();
  long maxnum = 0;// 最大出现次数
  Map letters = new HashMap();// 保存统计出现最多字母的集合
  for (int i = 0; i < strchars.length; i++) {
   String key = strchars[i] + "";
   if (Character.isLetter(strchars[i])) {
    long beforLen = str.length();// 替换之前
    str = str.replaceAll(key, "");
    long afterLen = str.length();// 替换之后
    long findnum = beforLen - afterLen;// 出现次数
    if (maxnum < findnum) {
     maxnum = findnum;
     letters.clear();// 清空集合
     letters.put(key, new Long(maxnum));// 记录出现最多字母
    } else if (maxnum == findnum && letters.get(key) == null) {// 出现次数一样,并且未曾记录
     letters.put(key, new Long(maxnum));// 记录出现最多字母
    }
   }
  }
  Iterator it = letters.entrySet().iterator();
  while (it.hasNext()) {
   Map.Entry entry = (Map.Entry) it.next();
   System.out.println("字母:" + entry.getKey());
   System.out.println("次数:" + entry.getValue());
  }

0 请登录后投票
   发表时间:2009-11-29  
用数据库的方法可以解决,先每一个字母一个个插入数据库,然后按字母名称count() group by下,就知道那个字母出现次数最多了
0 请登录后投票
   发表时间:2009-12-02   最后修改:2009-12-02

一个时间复杂度为n的算法,可能代码有点多。

呵呵,以可读性换取代码长度,应该还是值得的。

 

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

public class TestClass {

	public static void main(String[] args) {
		HashMap<Character, Integer> map = new HashMap<Character, Integer>();
		String str = "aabbccbddeeaabbdflksajfldsjal;fjdl;skajlfdjs;lajflueiowjfldskj";
		int len = str.length();
		for (int i = 0; i < len; i++) {
			char c = str.charAt(i);
			if (map.containsKey(c)) {
				map.put(c, map.get(c) + 1);
			} else {
				map.put(c, 1);
			}
		}
		
		// 得到最大的出现次数
		int maxValue = 0;
		for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
				.iterator(); iter.hasNext();) {
			Entry<Character, Integer> entry = iter.next();
			int value = entry.getValue();
			if (value >= maxValue) {
				maxValue = value;
			}
		}

		//取出出现次数最多的字母和对应的次数
		for (Iterator<Entry<Character, Integer>> iter = map.entrySet()
				.iterator(); iter.hasNext();) {
			Entry<Character, Integer> entry = iter.next();
			char key = entry.getKey();
			int value = entry.getValue();
			if (value == maxValue) {
				System.out.println("出现次数最多的字母为:" + key + "  出现次数为:" + value);
			}
		}

	}
}

 输出结果为:

出现次数最多的字母为:a  出现次数为:8

出现次数最多的字母为:l  出现次数为:8

出现次数最多的字母为:j  出现次数为:8

 

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics