CSDN竞赛8期参赛总结

概述

本次仅仅选了一个题目进行作答,结果答题后只有90%的用例通过

题目

1、代写匿名信

题目名称:代写匿名信 小Q想要匿名举报XX领导不务正业! 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。 现在小Q找来了报纸,和自己的举报信的Txt, 你能帮他确定一下是否能够完成匿名信吗?

2、分析

考虑使用map的特性,模拟现实情况

3、代码

// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改
import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str_0 = scan.nextLine().trim();
        String words = str_0;
        String str_1 = scan.nextLine().trim();
        String msg = str_1;
        scan.close();
        String result = solution(words, msg);
        System.out.println(result);
    }
    public static String solution(String words, String msg){
// TODO: 请在此编写代码
        /*先判断报纸每个字母有多少个*/
        final Map<Character,Integer> wordsMap = new HashMap<>();
        /* 先自行加一个作用域 */
        {
            final char[] wordsArray = words.toCharArray();
            for( int i=0; i < wordsArray.length; ++i ) {
                final Character key = wordsArray[i];
                final int value = wordsMap.getOrDefault(key, 0);
                wordsMap.put(key , value + 1);
            }
        }
        /* 使用报纸上的字母,用一个减掉一个 */
        final char[] msgArray = msg.toCharArray();
        for( int i=0; i< msgArray.length; ++i) {
            final Character key = msgArray[i];
            /* 查无此字母,直接返回 */
            if(!wordsMap.containsKey(key)) {
                return "No";
            }
            final int currentValue = wordsMap.get(key);
            /* 字母已经被用完了,但是还需要一个 */
            if(currentValue <= 0) {
                return "No";
            }
            /* 用一个减掉一个 */
            final int value = currentValue - 1;
            /* 记录字母剩余的数量 */
            wordsMap.put(key, value);
        }
        return "Yes";
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值