ZZULI-2019年3月份月赛(个人赛)问题 G: 小P母校名字的缩写 思维

小P对自己的母校很有感情,他看到一个字符串的时候,总是看一看字符串中的字母能不能组成他母校名字的英文缩写,现给定一个仅由英文字母构成的字符串。请你帮小P找一找能组成几个学校名字的英文缩写。字母不区分大小写。 

输入

第一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。 

第二行为小P学校名字的英文缩写,名字缩写长度不超过10。 

输出

输出一个整数,表示字符串中包含学校名字缩写的个数。

hLuTZAILjiTuyZz
ZZULI

这个题我们首先记录第一行串A中每个字母的个数。然后记录第二行串B中每个字母的个数。

然后串A和串B中所有相同字母的个数做除法,取最小的那个即可。

#include<bits/stdc++.h>
using namespace std;
int a[26];
int b[26];
int main()
{
    //freopen("C://input.txt","r",stdin);
    string s,s1;
    cin >> s;
    cin >> s1;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    int k=100000;
    int len=s.length();
    int len1=s1.length();
    for(int i=0;i<len;i++)
    {
        if(s[i]>='a'&&s[i]<='z')
            a[s[i]-'a']++;
        else if(s[i]>='A'&&s[i]<='Z')
            a[s[i]-'A']++;
    }
    for(int i=0;i<len1;i++)
    {
        if(s1[i]>='a'&&s1[i]<='z')
            b[s1[i]-'a']++;
        else if(s1[i]>='A'&&s1[i]<='Z')
            b[s1[i]-'A']++;
    }
    for(int i=0;i<len1;i++)
    {
        if(s1[i]>='a'&&s1[i]<='z')
        {
            int pos=a[s1[i]-'a']/b[s1[i]-'a'];
            k=min(k,pos);
        }
        else if(s1[i]>='A'&&s1[i]<='Z')
        {
            int pos=a[s1[i]-'A']/b[s1[i]-'A'];
            k=min(k,pos);
        }
             
    }
    printf("%d\n",k);
}
/**************************************************************
    Problem: 2413
    User: 1610101013
    Language: C++
    Result: 正确
    Time:3 ms
    Memory:1656 kb
****************************************************************/

 

上一篇:ZZULI 1071: 分解质因子


下一篇:SyntaxError: Non-ASCII character ‘\xe5’ in file 的解决办法