关于map的应用之次佛锅

一、题目链接

C-次佛锅_2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(重现赛)@威扬工作室 (nowcoder.com)

二、题目简介

通过hashmap来存放和value之后再通过key来查value 

输入

chi 1 huo 3 guo 1
3
chi
huo
guo

输出

1
3
1

三、涉及知识点

这道题涉及的知识点如下:

hashmap、、内存申请

如果都已经掌握,请自行将这道题过掉;如果没有掌握,请务必先将这些知识点进行掌握。

四、算法分析

  1. 首先分析输入的字符,可以发现每个字符串后面都有一个数字,所以每对由字符串和数字组成,所以用输入的s为key 输入的n为value,存入map
  2. 之后输入的数字是接下来是需要查询的字符串的数量,
  3. 之后再输入的是需要查询的字符串
  4. 时间复杂度为n,没有循环的嵌套
  5. 详细解释看代码详解

五、源码讲解


        Scanner sc=new Scanner(System.in);
    	String s;
    	String s2;

    	int n;
    	int m;
    	Map<String, Integer>map=new HashMap<String, Integer>();
    	while(true) {
    		s=sc.next();
    		if(s.charAt(0)>'9'||s.charAt(0)<'0') {
    			n=sc.nextInt();
    			map.put(s,map.getOrDefault(s, 0)+n);
			}
    		else {
    			m=Integer.parseInt(s);//输入到最后的个数
    			break;
    			
    		}
    	}
    	

创建好map时,注意map的类型

  1. 在创建一个死循环,一直到输入的数字没有匹配的字符串
  2. 输入s,当输入的字符串不是数字时,再次输入整数,表示这个字符串的个数,或者菜名的个数,
  3. map.put(s,map.getOrDefault(s, 0)+n);这个代码是重点代码,每次将字符串为key 数量为value存入map,每次存放时都需要查询当前map中个当前字符串的个数 (value);map.getOrDefault(s, 0)就是查找s的value;map.put(s,map.getOrDefault(s, 0)+n);如果存在s则再次基础上在次添加新的个数n;
  4. 当没有输入字符串时,输入数字,自然不会进入if循环,则会将输入的字符串强转为整形,也就是输入查询菜名的个数;之后就退出循环

for (int i = 0; i < m; i++) {
    		s2=sc.next();
			System.out.println(map.getOrDefault(s2, 0));
		}
  1. 在上面我们将输入的整形得到后,也就是输出打印的个数m;
  2. 我们再次输入即将查询的菜名,并在map中查询,之后在打印value

具体代码


import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
    	String s;
    	String s2;

    	int n;
    	int m;
    	Map<String, Integer>map=new HashMap<String, Integer>();
    	while(true) {
    		s=sc.next();
    		if(s.charAt(0)>'9'||s.charAt(0)<'0') {
    			n=sc.nextInt();
    			map.put(s,map.getOrDefault(s, 0)+n);
			}
    		else {
    			m=Integer.parseInt(s);//输入到最后的个数
    			break;
    			
    		}
    	}
    	for (int i = 0; i < m; i++) {
    		s2=sc.next();
			System.out.println(map.getOrDefault(s2, 0));
		}

    }
}

六、FAQ

请各位大佬指正,共勉!

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值