如果ransomNote的长度要比magazine要长,那肯定是错误的
先遍历magazine,统计每个字符出现的次数,再遍历 ransomNote,每次将数组中对应的字符的个数减一,如果减一以后的值小于0了,说明数组中已经没有这个字符了,那么就是错误的
class Solution
{
public:
bool canConstruct(string ransomNote, string magazine)
{
int len1 = ransomNote.size();
int len2 = magazine.size();
if (len1 > len2) return false;
vector<int>ve(26,0);
for (auto& ch : magazine)
{
++ve[ch - 'a'];
}
for (auto& ch : ransomNote)
{
if (--ve[ch - 'a'] < 0)
{
return false;
}
}
return true;
}
};
int main()
{
Solution A;
cout << A.canConstruct("bg","bbg") << endl;
return 0;
}
时间复杂度:O(m+n),其中 m 是字符串 ransomNote 的长度,n 是字符串 magazine 的长度,我们只需要遍历两个字符一次即可 空间复杂度:O(∣S∣),S 是字符集,这道题中 S 为全部小写英语字母,因此 |S| = 26
|