package com.contest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
/**
* 字符串完美度
* 思路:大小写不区分,所以碰到大写转为小写考虑即可
* @author chaigw
*
*/
public class MeritString {
static String allString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static String selectedString = "abcdefghijklmnopqrstuvwxyz";
static int number = 26;
static int perNumMerit = number;
/**
*存储出现的次数 ,LinkedHashMap是按照插入的顺序进行排列的
*/
static Map<String,Integer> map = new LinkedHashMap<String, Integer>();
/**
* 排序后的map
*/
static Map<String,Integer> sortMap = new LinkedHashMap<String, Integer>();
/**
* 最终完美度
*/
static int meritNum = 0;
/**
* 生成随机长度的随机字符的字符串,调用 重要方法perfect()
* @param args
*/
public static void main(String[] args) {
Random rand = new Random();
int loop = rand.nextInt(number)+1;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < loop; i++) {
int index = rand.nextInt(allString.length());
builder.append(allString.charAt(index));
}
System.out.println("最终完美度:"+perfect(builder.toString()));
}
/**
* 获取字符完美度:
* 用Map存储每个字符出现次数,次数越高分配的数字越高
*
* @param s
* @return
*/
public static int perfect(String s)
{
System.out.println("随机生成的字符串是:"+s);
s = s.toLowerCase();
/**
* 把字符对保存在map中
*/
for (int i = 0; i < s.length(); i++) {
String temp = String.valueOf(s.charAt(i));
if(null != map.get(temp))
{
map.put(temp, map.get(temp)+1);
}
else
{
map.put(temp, 1);
}
}
/**
* 进行排序
*/
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>();
list.addAll(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String,Integer>>() {
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});
System.out.println("排序后的kv对:"+list);
for (int i = 0; i < list.size(); i++) {
sortMap.put(list.get(i).getKey(), list.get(i).getValue());
meritNum += list.get(i).getValue() * (perNumMerit--);
}
int m=8;
return meritNum;
}
}
涉及_map排序_随机字符串
最新推荐文章于 2022-10-06 21:59:34 发布