蓝桥杯:单词分析

该Java代码实现了一个程序,读取用户输入的字符串,然后使用哈希表存储每个字母及其出现的次数。通过两层循环,它检查字符串中的每个字母对并累加相同的字母。最后,找出哈希表中值最大的键(出现次数最多的字母),并打印出这个键以及它的最大出现次数。
摘要由CSDN通过智能技术生成

写得比较复杂:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
//单词分析:
import java.util.Scanner;
import java.util.Set;

public class dataa1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        String[] arr = new String[str.length()];//存放字母
        int sum = 1;//计数:字符串中每个字母出现的次数
        Map<String, Integer> map = new HashMap<String, Integer>();
        //哈希表存储字母及其出现的次数:K(String):字母   V(Integer):出现次数
        for(int i=0;i<str.length();i++) {//循环截取字符串放入数组中
            arr[i]=str.substring(i, i+1);
        }
        for(int i=0;i<str.length();i++) {//判断数组中元素是否相等
            for(int j=i+1;j<str.length();j++) {
                if(arr[i].equals(arr[j])) {
                    sum++;
                }
            }
            if(!map.containsKey(arr[i])) {//判断哈希表内是否有该元素如果有不重复进入哈希表
                map.put(arr[i], sum);
//                sum=1;//错误:重复字母不进入该语句 不执行计数清空,则到下一个数值进入表之前持续累加,使进入表中数据V数据比实际大
            }
            sum=1;//一组数值比较完成后,计数清空
        }
        //获取V对应的K:
        Iterator<String> it = map.keySet().iterator();//获取一个迭代器
        while (it.hasNext()) {//遍历集合中元素
            String key = it.next().toString();
            if(map.get(key).equals(getMaxValue(map))) {//获取最大V对应的K
                Map<String, Integer> map1 = new HashMap<String, Integer>();//建立哈希表储存最大V对应的K
                map1.put(key, (Integer) getMaxValue(map));
                System.out.println(getMinKey(map1));//获取新哈希表中最小K
                System.out.println(getMaxValue(map));
                break;
            }
        }
        }
        
    public static Object getMaxValue(Map<String, Integer> map) {//获取最大V
        if(map== null) {
            return null;
        }
        Collection<Integer> c = map.values();//获取所有V的集合
        Object[] obj = c.toArray();
        Arrays.sort(obj);//将集合元素进行排序
        return obj[obj.length-1];//取最后一个元素:最大元素
    }
    public static Object getMinKey(Map<String, Integer> map1) {//获取最小K
        if(map1== null) {
            return null;
        }
        Set<String>    set = map1.keySet();//获取所有K的集合
        Object[] obj = set.toArray();
        Arrays.sort(obj);//将集合元素进行排序
        return obj[0];//取第一个一个元素:最小元素
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值