📅  最后修改于: 2023-12-03 15:12:39.752000             🧑  作者: Mango
有一个字符数组arr,里面存放了多个字符串。编写一个函数,接收该字符数组和一个字符串str作为参数,返回一个整数代表在arr中有多少个字符串与str具有相同的字符种类和数目。
int countStrings(char arr[][20], int n, char *str);
输入:
char arr[][20] = {"hello", "world", "leetcode", "ooolleoooxoo", "php"};
int n = 5;
char str[] = "ollx";
输出:2
分析:
可以遍历数组,分别判断每个字符串和str的字符种类和数量是否相等,如果相等,则计数器加1。
因为对每个元素都需要遍历一遍整个字符串,所以时间复杂度为$O(nm)$,其中n为字符数组的行数,m为字符数组中字符串的最长长度,20 in this case。
int countStrings(char arr[][20], int n, char *str)
{
int count = 0;
for (int i = 0; i < n; i++)
{
int cnt[26] = {0}, len = strlen(arr[i]);
bool isMatch = true;
for (int j = 0; j < len; j++)
{
cnt[arr[i][j] - 'a']++;
}
for (int j = 0; j < strlen(str); j++)
{
if (cnt[str[j] - 'a']-- == 0)
{
isMatch = false;
break;
}
}
if (isMatch)
{
count++;
}
}
return count;
}