小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 ****************************************************************/