1813. 方块游戏
分析:
- 题目要求在一块板子的正反两面单词中选一面单词,这两个单词有可能有共同部分,因为题目要求,不管每个板子哪一侧朝上,都要组成n个单词,所有如果两个单词有共同部分,我们需要保留两个单词中个数多的那一个
- 举个例子fox与box,需要保留f,b,o,x,即不同的部分都需要保留,相同的部分只选一次
- 再举出一个例子,foox与booox,f与b需要保留,显然o要保留2个才能拼出foox,保留3个才能拼出booox,所以o需要保留3个,如果只保留2个,拼不出booox,违背题意,所以应该保留个数多的那一个
#include<bits/stdc++.h>
using namespace std;
string s1;
string s2;
vector<int> vec3(26);
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s1>>s2;
vector<int> vec1(26);//vector数组重新清0,对于每一组单词都要从0开始计数
vector<int> vec2(26);
for(int i=0;i<s1.size();i++)
{
vec1[s1[i]-'a']++;
}
for(int i=0;i<s2.size();i++)
{
vec2[s2[i]-'a']++;
}
for(int i=0;i<26;i++)
{
vec3[i]+=max(vec1[i],vec2[i]);
}
}
for(int i=0;i<26;i++)
{
cout<<vec3[i]<<endl;
}
}