华为OD机试 - 掌握的单词个数 - 回溯(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题++点这里++

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个"单词"(字符串),那么我们就认为你掌握了这个单词。

words 的字等仅由 a-z 英文小写宁母组成,例如"abc"。

chars 由 a- z 英文小写字母和"?"组成,其中英文"?"表示万能字符,能够在拼写时当作任意一个英文字母。例如"?"可以当作"a"等字母。

注意: 每次拼写时,chars 中的每个字母和万能字符都只能使用一次。输出词汇表 words 中你掌握的所有单词的个数。没有掌握任何单词,则输出0。

二、输入描述

第一行: 输入数组 words 的个数,记作N。

第二行~第N+1行: 依次输入数组words的每个字符串元素。

第N+2行: 输入字符串 chars

三、输出描述

输出一个整数,表示词汇表 words 中你掌握的单词个数

备注:

1 <= words.length <= 100

1 <= words[i].length, chars.length <= 100

所有字符串中都仅包含小写英文字母、英文问号

1、输入

4

cat

bt

hat

tree

atach??

2、输出

3

3、说明

可以掌握的单词 "cat"、"bt"和"hat"。

四、解题思路

  1. 遍历输入的 words 数组,对于每个单词,统计其每个字母的出现次数。
  2. 统计 chars 字符串中各字符的数量。
  3. 对于每个单词,检查其每个字母在 chars 中的数量是否足够,并且考虑万能字符"?"的情况。
  4. 如果单词中的每个字母在 chars 中都能够被拼写,则将该单词加入结果计数中。
  5. 返回最终的结果计数,即为掌握的单词个数。

五、Java算法源码

java 复制代码
public class OdTest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.valueOf(scanner.nextLine());

        String[] words = new String[n];
        for (int i = 0; i < n; i++) {
            words[i] = scanner.nextLine();
        }

        String chars = scanner.nextLine();

        System.out.println(getWordSum(words, n, chars));

        scanner.close();
    }

    public static int getWordSum(String[] words, int n, String chars) {
        int ret = 0;

        // 获取chars字符串中各字符的数量
        int[] arr = getCharSum(chars);

        for (int i = 0; i < n; i++) {
            int sum = 0;

            // 获取word字符串中各字符的数量
            int[] charSumArr = getCharSum(words[i]);

            for (int j = 0; j < 128; j++) {
                // word的字符超过chars的对应字符出现的数量
                sum += Math.max(charSumArr[j] - arr[j], 0);
            }

            if (sum <= arr['?']) {
                ret++;
            }
        }

        return ret;
    }

    /**
     * 获取word字符串中各字符的数量
     */
    public static int[] getCharSum(String str) {
        int[] arr = new int[128];

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            arr[c] += 1;
        }

        return arr;
    }
}

六、效果展示

1、输入

3

hello

world

cloud

welldonehohneyr

2、输出

2

3、说明

可以掌握的单词 "hello"、"world"。

🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关推荐
HaiFan.25 分钟前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
马浩同学30 分钟前
【GD32】从零开始学GD32单片机 | DAC数模转换器 + 三角波输出例程
c语言·单片机·嵌入式硬件·mcu
我要学编程(ಥ_ಥ)33 分钟前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
music0ant36 分钟前
Idea 添加tomcat 并发布到tomcat
java·tomcat·intellij-idea
一个没有本领的人40 分钟前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡1 小时前
C项目 天天酷跑(下篇)
c语言·开发语言
计算机徐师兄1 小时前
Java基于SSM框架的无中介租房系统小程序【附源码、文档】
java·微信小程序·小程序·无中介租房系统小程序·java无中介租房系统小程序·无中介租房微信小程序
源码哥_博纳软云1 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
长安——归故李1 小时前
【C语言】成绩等级制
c语言·开发语言
忒可君2 小时前
C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
java·开发语言