本题是学校的集训里的题,所有不知道题目名字是啥,直接看题目就好
解题思路:因为字符串只含有小写字母,所以可以创建两个数组分别来存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;
}