目录

题目

思路

Code


题目

有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。
words 的字符仅由 a-z 英文小写字母组成,例如“abc”
chars 由 az 英文小写字母和“2”组成。其中英文“?”表示万能字符,能够在拼写时当作任意一个英文字母。例如:“?”可以当作“a”等字母
注意: 每次拼写时,chars 中的每个字母和万能字符都只能使用一次
输出词汇表 words 中你掌握的所有单词的个数。没有掌握任何单词,则输出0。

输入描述
第一行: 输入数组 words 的个数,记作N。
第二行~第N+1行: 依次输入数组words的每个字符串元素
第N+2行: 输入字符串chars
输出描述
输出一个整数,表示词汇表 words 中你掌握的单词个数
备注
1 ≤ words.length ≤ 100
1 < wordslil.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"

思路

1:主要考察hashmap这个数据结构。

2:分别统计words和chars的各个字母的个数,最后逐个对比看是否满足条件即可。

3:还有个巧妙的点在于可以用数组来模拟hashmap,因为毕竟key都是小写字母,可以用ascii 码来替代。

4:其实也是leetcode的原题改过来的,力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

编辑

Code

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
from queue import Queue
 
n = int(input())
words = []
for i in range(n):
    words.append(input())
chars = input()
char_count_map = [0 for i in range(26)]
maigc_char_count = 0
j=0
while(True):
    if(j>=len(chars)):
        break
    else :
        if(chars[j] == '?'):
            maigc_char_count +=1
        else :
            char_count_map[ord(chars[j])-ord('a')] += 1
    j+=1


output_count = 0
i=0
while(True):
    if(i>=n):
        print(output_count)
        break
    else :
        word_count_map = [0 for i in range(26)]
        for k in range(len(words[i])):
            word_count_map[ord(words[i][k])-ord('a')]+=1
        

        flag = True
        temp_count = maigc_char_count
        for k in range(26):
            if (word_count_map[k] - char_count_map[k] >0):
                temp_count -= word_count_map[k] - char_count_map[k]
                if(temp_count < 0) :
                    flag = False
                    break
        if (flag) :
            output_count+=1
    i+=1


【华为od机试真题Python+JS+Java合集】【超值优惠】:Py/JS/Java合集

【华为od机试真题Python】:Python真题题库

【华为od机试真题JavaScript】:JavaScript真题题库

【华为od机试真题Java】:Java真题题库

【华为od机试真题C++】:C++真题题库

【华为od机试真题C语言】:C语言真题题库

【华为od面试手撕代码题库】:面试手撕代码题库

【华为od机试面试交流群:830285880】