题目:判断两个字符串是否由相同字符组成,由相同字符组成的条件是:长度相同,且所含的字符个数相同,eg:s1 = ”adfgg“;s2 = ”gfdga“ ,我们称s1和s2是匹配的。
/* 法一:假设全为ASCII码,则字符的范围为0-255,所以可以开辟两个大小为256的数组,用于保存每个字符串中每个字符出现的次数。
* 然后比较两个数组的值是否全部相同,是,则匹配;否则,则不匹配。
* 改进一下,可以只开辟一个数组,遍历第一个字符串时,对遇到的每个字符,其次数+1,
* 最后得到count1数组(表示以下标为ASCII值的字符在字符串中出现的次数); 然后遍历第二个字符串,对遇到的每个字符,将其count1数组中
* 的次数-1;最后看count1数组中的元素是否全部为零,是,则匹配,否则,不匹配;
* O(n)
*/
bool isMatch_E1(string s1, string s2)
{
if (s1.length() != s2.length())
return false;
int len = s1.length();
const int size = 256;
int count1[size] = { 0 }; //保存s1中每个字符出现的次数,下标为相应字符的ASCII码值
int i = 0;
for (i = 0; i < len; i++)
{
count1[s1[i]]++;
}
for (i