题目描述🍗
力扣嘉年华将举办一系列展览活动,后勤部将负责为每场展览提供所需要的展台。 已知后勤部得到了一份需求清单,记录了近期展览所需要的展台类型, demand[i][j] 表示第 i 天展览时第 j 个展台的类型。 在满足每一天展台需求的基础上,请返回后勤部需要准备的 最小 展台数量。
注意:
同一展台在不同天中可以重复使用。
示例 1:
输入:demand = [“acd”,“bed”,“accd”]
输出:6
解释: 第 0 天需要展台 a、c、d; 第 1 天需要展台 b、e、d; 第 2 天需要展台 a、c、c、d; 因此,后勤部准备 abccde 的展台,可以满足每天的展览需求;
示例 2:
输入:demand = [“abc”,“ab”,“ac”,“b”]
输出:3
提示:
1 <= demand.length,demand[i].length <= 100
demand[i][j] 仅为小写字母
算法分析 🍗
使用两个哈希表:一个放结果,一个放每个字符串的存储,逐个添加,逐个对比,最后相加返回
完整代码 🍗
class Solution {
public:int minNumBooths(vector<string>& demand) {unordered_map<char,int>maxmap;//放结果的哈希表//使用两个哈希表:一个放结果,一个放每个字符串的存储//逐个添加,逐个对比,最后相加返回int count=0;int n=demand.size();//字数串的数量for(int i=0;i<n;i++){int n1=demand[i].size();//字符数量unordered_map<char,int>currmap;for(int j=0;j<n1;j++){currmap[demand[i][j]]++;}for(int j=0;j<n1;j++){maxmap[demand[i][j]]=currmap[demand[i][j]]>maxmap[demand[i][j]]?currmap[demand[i][j]]:maxmap[demand[i][j]];}}for(auto kv:maxmap){count+=kv.second;}return count; }
};
写法二:也可以不使用unordered_map,由于小写的字母一共有26个,因此也可以使用长度为26的一个数组代替哈希表,但是思路也是哈希。算是另一种写法了。
class Solution {
public: int minNumBooths(vector<string>& demand) { vector<int>v(26);//初始化成26个0,或者vector<int>v(26,0) for(auto str:demand) {vector<int>tmp(26); for(auto i:str) {tmp[i-'a']++; v[i-'a']=max(v[i-'a'],tmp[i-'a']); }}int sum=0; for(auto i:v) sum+=i; return sum; }
};
本篇完!🍗