本题是学校的集训里的题,所有不知道题目名字是啥,直接看题目就好
解题思路:因为字符串只含有小写字母,所以可以创建两个数组分别来存s和t的每个字母出现次数,然后遍历数组,如果s字符串中的某个字母比t的小,说明不能匹配,答案为0,否则就找s字符串中某的字母数量除t字符串中某个字母数量的最小值(前提是某个字母数量都不为0)
下面是c++代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int t, Min = 10e5;
string S, T;
int arr1[26] = { 0 }, arr2[26] = { 0 };
cin >> t;
for (int i = 0; i < t; i++) {
for (int j = 0; j < 26; j++) {
arr1[j] = 0;
}
for (int j = 0; j < 26; j++) {
arr2[j] = 0;
}
Min = 10e5;
cin >> S >> T;
for (int j = 0; j < S.length(); j++) {
arr1[(int)(S[j] - 97)]++;
}
for (int j = 0; j < T.length(); j++) {
arr2[(int)(T[j] - 97)]++;
}
for (int j = 0; j < 26; j++) {
if (arr1[j] < arr2[j]) {
Min = 0;
break;
}
if(arr1[j] != 0 && arr2[j] != 0){
Min = min(Min,arr1[j] / arr2[j]);
}
}
cout << Min << endl;
}
return 0;
}