题目描述
小P对自己的母校很有感情,他看到一个字符串的时候,总是看一看字符串中的字母能不能组成他母校名字的英文缩写,现给定一个仅由英文字母构成的字符串。请你帮小P找一找能组成几个学校名字的英文缩写。字母不区分大小写。
输入
第一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
第二行为小P学校名字的英文缩写,名字缩写长度不超过10。
输出
输出一个整数,表示字符串中包含学校名字缩写的个数。
思路:先转换为小写,然后统计各字符出现的次数,然后不断匹配找次数就可以了,代码没有优化,有的部分是多余的。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
char s[maxn], p[15];
int cnt[100];
int num[100];
int main()
{
cin >> s >> p;
for(int i = 0; i < strlen(s); ++i)
{
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = s[i] + 'a' - 'A';
}
for(int i = 0; i < strlen(p); ++i)
{
if(p[i] >= 'A' && p[i] <= 'Z')
p[i] = p[i] + 'a' - 'A';
}
memset(cnt, 0, sizeof(cnt));
memset(num, 0, sizeof(num));
for(int i = 0; i < strlen(s); ++i)
cnt[s[i] - 'a']++;
for(int i = 0; i < strlen(p); ++i)
num[p[i] - 'a']++;
int ans = 0;
while(1)
{
bool flag = false;
for(int i = 0; i < strlen(p); ++i)
{
cnt[p[i] - 'a']--;
if(cnt[p[i] - 'a'] < 0)
{
flag = true;
break;
}
}
if(flag)
break;
ans++;
}
cout << ans << endl;
return 0;
}