zoukankan      html  css  js  c++  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<Character,Integer> map=new HashMap<Character,Integer>();

      Map接口中的方法:

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

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

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

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

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

      Map.Entry接口中的方法:

      public K getKey();取得key

      public V getValue();取得value

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

    如:Set<Map.Entry<String,String>> set=map.entrySet();

      关于Collections类中的sort()方法

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

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

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

      class StrLenComparator implements Comparator<String>
        {
          public int compare(String s1,String s2)
             {
            if (s1.length()>s2.length())
            {
                return 1;
             }
            if (s1.length()<s2.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<N;i++){
    			names[i]=cin.next();//接收键盘输入的字符串
    				System.out.println(tb.beautyfulname(names[i]));
    		}
    		cin.close();
    	}
    
    	public int beautyfulname(String name){
    		//统计字符个数
    		char[] c=name.toCharArray();
    		Map<Character,Integer> map=new HashMap<Character,Integer>();//要想使用Map接口,必须依靠子类实例化
    		for(int i=0;i<c.length;i++){
    			if(map.containsKey(c[i])){//判断集合中是否有键
    				map.put(c[i],map.get(c[i])+1);//向集合中增加内容
    			}else{
    				map.put(c[i],1);//没有,就把值赋1
    			}
    		}
    
    		//计算名字的漂亮度,先进行排序,再计算
    		//排序
    		List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
    		Collections.sort(list,new Comparator<Map.Entry<Character,Integer>>(){
    			public int compare(Map.Entry<Character,Integer> o1,Map.Entry<Character,Integer> o2){
    				return o2.getvalue().compareTo(o1.getvalue());//按自然排序,降序
    			}
    		});
    
    		//计算漂亮度=26*字母数最多的+25*次多的+...
    		int result=0;
    		for(int i=0;i<list.size();i++){//list集合存储的是Map集合的映射关系
    			result=result+list.get(i).getvalue()*(26-i);
    		}
    		return result;
    
    	}
    }
    

      

  • 相关阅读:
    22天学习java基础笔记之day08
    22天学习java基础笔记之day07
    22天学习java基础笔记之day06
    22天学习java基础笔记之day05
    架构师_设计模式_行为型_迭代器
    架构师_设计模式_行为型_命令模式
    架构师_设计模式_行为型_责任链模式
    架构师_设计模式_行为型_模板方法
    架构师_设计模式_结构型_装饰器模式
    架构师_设计模式_结构型_桥接模式
  • 原文地址:https://www.cnblogs.com/GumpYan/p/5816317.html
Copyright © 2011-2022 走看看