2024天梯 JAVA L2-2/L2-050 懂蛇语 AC代码

本文介绍了一个Java程序,定义了一个getA方法,用于处理输入字符串并将单词小写后存储在HashMap中,通过computeIfAbsent方法处理重复单词。程序接受查询,如果单词在字典中有重复,排序并输出,否则输出原句。
摘要由CSDN通过智能技术生成

思路:定义一个getA方法用于返回一个字符串res,res为每个单词的小写字母,因为一个res可能对应多句词典里的话,所以用hashmap来存储,键值对分别为String类型的res以及list集合用于存储res对应字典里的句子,在存储过程中用到了一个computeIfAbsent()方法,

map.computeIfAbsent(res, k -> new ArrayList<>()).add(s);

解释:第一个参数,map如果存在res,括号里返回的就是res对应的list,如果不存在就创建一个新的list k(k是list的变量名,但是没有用到这个变量名所以是灰色的),不管哪个情况都add需要加入的句子。·

之后q次询问,如果map里存在这个getA(这个句子),就获得对应的list并进行排序,然后输出,不存在就输出原句即可。

补充:这里map的值我用的是list而没有用set是因为那个字典里的句子可以重复,比如在yyds的字典里可以有两句yu yu du su,两句都要输出,卡的是测试点7

import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    public static void main(String[] args) throws IOException {
        int n = Integer.parseInt(bf.readLine());
        String[] ss = new String[n];
        for (int i = 0; i < n; i++) {
            ss[i] = bf.readLine();
        }
        HashMap<String, List<String>> map = new HashMap<>();
        for (String s : ss) {
            String res = getA(s);
            map.computeIfAbsent(res, k -> new ArrayList<>()).add(s);
        }
        int q = Integer.parseInt(bf.readLine());
        while (q-->0){
            String str = bf.readLine();
            String temp = getA(str);
            if (map.containsKey(temp)){
                List<String> list = map.get(temp);
                StringBuilder ans = new StringBuilder();
                list.sort(null);
                for(String s : list){
                    ans.append(s).append("|");
                }
                ans.delete(ans.length()-1,ans.length());//删除多的|
                out.println(ans);
            }else {
                out.println(str);
            }
        }
        out.flush();
    }
    static String getA(String str){
        String[] strs = str.split(" ");
        StringBuilder res = new StringBuilder();
        for (String s : strs) {
            if (s.isEmpty())
                continue;
            res.append(s.charAt(0));
        }
        return res.toString();
    }
}

感谢支持,点个关注一起学习~ 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劳逸结合的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值