万能字符单词拼写 - 华为OD统一考试(D卷)

OD统一考试(D卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

有一个字符串数组 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??

输出
3

说明:可以掌握的单词 "cat”、“bt"和"hat"。

示例2

输入
3
hello
world
cloud
welldonehohneyr

输出:
2

说明:可以掌握的单词 "hello”、“world"。

示例3

输入
3
apple
car
window
welldoneapplec?

输出:
2

说明:可以掌握的单词 "apple”、“car"。

题解

模拟题

通过对单词的每个字符个数进行统计,然后按照题意要求进行模拟,拼写时单词的每个字符都能拼出来则单词可以掌握。

Java

import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @author code5bug
 */
public class Main {

    // 统计字符串各字符个数
    public static int[] counter(String s) {
        // cnt[26] 表示 '?' 号的个数
        int[] cnt = new int[27];
        for (char c : s.toCharArray()) {
            if (c == '?') cnt[26]++;
            else cnt[c - 'a']++;
        }
        return cnt;
    }

    // 检测 source 字符个数能否由 target 拼接而来(target[26] 表示 '?' 的个数)
    public static boolean canSpell(int[] source, int[] target) {
        int t = target[26];  // '?' 号个数
        for (int i = 0; i < 26 && t >= 0; i++) {
            if (source[i] <= target[i]) continue;

      

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
06-27 08:44
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务