java 名字的漂亮度_名字的漂亮度

题目如下:

给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。

每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个名字,计算每个名字最大可能的“漂亮度”。

输入:

整数N,后面N个名字,如

2 zhangsan lisi

输出:

每个名字对应的最大漂亮程度

如:192 101

分析:名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)+....+1*出现次数最小的。

要从以下几点入手:

1.统计字符的个数

2.升序排列或降序排列

3.计算漂亮度

知识点:

1.使用Scanner类输入数据

(1)public String next() :接收键盘输入的内容(注意如果带空格,只能取出空格之前的数据)

(2)public int nextInt() :接收键盘输入的数字

(3)public boolean hasNextXxx() :判断输入的是int型还是float型。hasNextInt(),hasNextfloat()。

2.toCharArray(),只能针对字符串有这个方法,Scanner类是没有这种方法的

3.关于Map接口,要想使用此接口,必须依靠子类实例化

如:Map map=new HashMap();

Map接口中的方法:

public boolean containsKey(Object key);判断集合中是否存在指定的key

public boolean containsValue(Object value);判断集合中是否存在指定的value

put(key,value);向集合中增加内容

get(key);根据key找出对应的value

publicstatic interface Map.Entry接口专门用来保存key->value的内容,之后可以用getKey()和getValue()进行key与value的分离

Map.Entry接口中的方法:

public K getKey();取得key

public V getValue();取得value

关于entrySet()方法,能够将Map集合中的映射关系取出,存入Set集合中

如:Set> set=map.entrySet();

关于Collections类中的sort()方法

sort()方法可以对集合进行排序,但要求集合中每个对象所在的类必须实现Comparable接口。而且要把对象传进去

String类本身已经实现好了Comparable接口。如果是一个自定义的类,一定要实现Comparable接口。

如:Collections.sort(list,new StrLenComparator());

class StrLenComparator implements Comparator

{

public int compare(String s1,String s2)

{

if (s1.length()>s2.length())

{

return 1;

}

if (s1.length()

{

return -1;

}

return s1.compareTo(s2);//如果字符串长度相同,就按自然顺序排。

}

}

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Scanner;

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 static class TestBeauty2{

public static void main(String[] args) {

Scanner cin=new Scanner(System.in);

int N=cin.nextInt();/*接收键盘输入的数字,就是表示有几个字母,即有几个字符串*/

String[] names=new String[N];//构建字符串数组

TestBeauty2 tb=new TestBeauty2();

for(int i=0;i

names[i]=cin.next();//接收键盘输入的字符串

System.out.println(tb.beautyfulname(names[i]));

}

cin.close();

}

public int beautyfulname(String name){

//统计字符个数

char[] c=name.toCharArray();

Map map=new HashMap();//要想使用Map接口,必须依靠子类实例化

for(int i=0;i

if(map.containsKey(c[i])){//判断集合中是否有键

map.put(c[i],map.get(c[i])+1);//向集合中增加内容

}else{

map.put(c[i],1);//没有,就把值赋1

}

}

//计算名字的漂亮度,先进行排序,再计算

//排序

List> list=new ArrayList>(map.entrySet());

Collections.sort(list,new Comparator>(){

public int compare(Map.Entry o1,Map.Entry o2){

return o2.getvalue().compareTo(o1.getvalue());//按自然排序,降序

}

});

//计算漂亮度=26*字母数最多的+25*次多的+...

int result=0;

for(int i=0;i

result=result+list.get(i).getvalue()*(26-i);

}

return result;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值