您的位置:首页 > 其它

华为机试题---统计并输出每个字符在字符串中出现的次数

2014-03-10 01:23 639 查看
一、问题描述

手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示(可以用Map) 实例: 输入:aaabbbccc 输出:

* a 3

* b 3

* c 3

二、算法

1. 由于map存储结构为key-value,所以选择map存储,类型为: <Character,Integer>

2.由结果可知,a,b,c是按照字母顺序输出的,所有用sortedMap,通过看源代码可以知道,在sortedMap中载入比较器,实现了自然顺序排序。

public interface SortedMap<K,V> extends Map<K,V> {
 Comparator<? super K> comparator();


三、算法

/**
	 * Gets result map.
	 * @param str
	 * @return
	 */
	private Map<Character, Integer> getCountMap(String str) {
		SortedMap<Character, Integer> countMap = new TreeMap<Character, Integer>();
		char[] cellArray = str.toCharArray();
		for (int i = 0; i < cellArray.length; i++) {
			if (countMap.containsKey(cellArray[i])) {
				countMap.put(cellArray[i], countMap.get(cellArray[i]) + 1);
			} else {
				countMap.put(cellArray[i], 1);
			}
		}
		return countMap;

	}

	/**
	 * Gets input string
	 * @return
	 */
	private String getInputStr() {
		Scanner cin = new Scanner(System.in);
		String inputStr = cin.nextLine().trim();
		return inputStr;
	}


四、测试类

public static final String REGEX = "^[a-z]*$";
	
	public static void main(String[] args) {

		Main6 m = new Main6();
		String inputStr = m.getInputStr();
		Map<Character, Integer> countMap = null;
		if (inputStr.matches(REGEX)) {
			countMap = m.getCountMap(inputStr);
			for (Map.Entry<Character, Integer> entry : countMap.entrySet()) {
				System.out.println(entry.getKey() + ":" + entry.getValue());
			}
		} else {
			//do exception
		}
	}
aaabbbccc
a:3
b:3
c:3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐