您的位置:首页 > 其它

华为OJ 初级:字符统计

2016-07-12 10:55 267 查看
描述
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。实现以下接口:
    输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
    按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
    清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。  
知识点字符串,排序
运行时间限制10M
内存限制128
输入输入一串字符。
输出对字符中的

各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
样例输入aadddccddc
样例输出dca
/*字符统计:
* 1、统计输入字符串中的英文字符(区分大小写)、数字和空格个数
* 2、按照统计个数由大到小输出
* 3、当个数相同时,按照ASII码由小到大输出
*
* 下面的解题思路是:
* 1、先用map表收集数据,字符作为key,字符的个数作为value
* 2、由于map没有compare()方法,将map转换为list集合,使用集合中的compare()方法
* 3、重写compare()方法,按照value值的大小排序,当value值相同时,根据key的值排序
* 4、输出key值
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
count(input);
scanner.close();
}

private static void count(String input) {
Map<Character, Integer> hashMap = new HashMap<>();
for (int i = 0; i < input.length(); i++) {//遍历字符串,当为英文字母、数字和空格时收集
if ((input.charAt(i) >= 'a' && input.charAt(i) <= 'z')
|| (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z')
|| input.charAt(i) == ' '
|| (input.charAt(i) >= '0' && input.charAt(i) <= '9')) {
if (hashMap.containsKey(input.charAt(i))) {//如果之前已经有该字符,则将其对应的value值+1
int temp = hashMap.get(input.charAt(i));
temp++;
hashMap.put(input.charAt(i), temp);
} else {
hashMap.put(input.charAt(i), 1);//如果之前没有收集该字符,则收集,并将value置1
}
}
}
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(
hashMap.entrySet());//将map转换为list集合

Collections.sort(list,new valuesSort());//将list排序
for(int i = 0; i < list.size(); i++){ //遍历list,输出key值
System.out.print(list.get(i).getKey());
}
}
}

class valuesSort implements Comparator<Map.Entry<Character, Integer>> {

@Override
public int compare(Map.Entry<Character, Integer> o1,  //重写compare方法
Map.Entry<Character, Integer> o2) {
// TODO Auto-generated method stub
if ((o2.getValue() - o1.getValue()) > 0)
return 1;
else if ((o2.getValue() - o1.getValue()) == 0
&& o2.getKey() - o1.getKey() < 0)
return 1;
else
return -1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: