可以用两个for循环,时间复杂度O(n²),太慢。
借助逻辑运算,用二进制表示两个字符串是否含有某个字符,然后进行并操作:
做法1:只能判断含有的字符是否相同,不能判断出现次数相同。
string s1, s2;
vector<int> mask(2);
for(char c: s1)
mask[0] |= 1<< c-'a';
for(char c: s2)
mask[1] |= 1 << c-'a';
return mask[0] & mask[1];
做法2:能判断每个字符出现的次数都要确保一样:
vector<int> count(26,0);
for(int i=0; i<s1;size(); i++)
{
count[s1[i]-'a']++;
count[s2[i]-'a']--;
}
for(int i=0; i<26; i++)
if(count[i]!=0)
return false;
return true;