马蹄
题目描述:给定你两个模板字符串s1,s2,再给你一个s,问s最多可以拆出多少个s1,s2
思路:用哈希表cnt1[150],cnt2[150],cnt[150]来存每个字母所出现的次数,再遍历所有的ascll码,当cnt1,cnt2不等于0的时候
就用cnt[i]/cnt1,cnt2,遍历得到最小值输出,这里INF定义为0x3f3f3f即可。
题目链接:https://www.matiji.net/exam/brushquestion/22/4777/C98C14523F069FECB0DEED64F00CEAB0?from=1
#include<bits/stdc++.h>
using namespace std;
int cnt1[150];
int cnt2[150];
int cnt[150];
const string s1="MATIJI";
const string s2="matiji";
const int INF=0x3f3f3f;
int main( )
{
string s;cin>>s;
for(auto v:s) cnt[v]++;
for(auto v:s1) cnt1[v]++;
for(auto v:s2) cnt2[v]++;
int ans1=INF,ans2=INF;
for(int i=0;i<150;i++){
if(cnt1[i]>0){
ans1=min(ans1,cnt[i]/cnt1[i]);
}
if(cnt2[i]>0){
ans2=min(ans2,cnt[i]/cnt2[i]);
}
}
cout<<ans1<<" "<<ans2;
return 0;
}
如果有帮助可以点赞收藏