马蹄

题目描述:给定你两个模板字符串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;
}

如果有帮助可以点赞收藏

全部评论

相关推荐

lafael:?你认真的?这几个项目已经烂大街到不能再烂了。你变个名字我都认可你好歹有点改进,怎么连名字都不换
点赞 评论 收藏
分享
好兄弟陶德霍华德:感觉面试聊得好其实不是什么好消息。因为大概是你技术栈不够匹配,所以只能浅浅的都简单问了一层。如果感兴趣一直往深问的话一定会有答不出来的地方的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务