1.题目的描述示例:
给你两个字符串:ransomNote和magazine,判断ransomNVote能不
能由magazine里面的字符构成。
如果可以,返回true;否则返回false。
magazine中的每个字符只能在ransomNote使用一次。
2.思路:看到这道题我的第一反应是哈希表,就是用哈希表存储次数,然后用次数做对比,不一样的就直接false
3.代码:bool canConstruct(char * ransomNote, char * magazine)
{
int hash1[26]={0};
int hash2[26]={0};
int r2=strlen(ransomNote);
int m2=strlen(magazine);
int i=0;
for(i=0;i<m2;i++)
{
hash2[magazine[i]-'a']++;
}
for(i=0;i<r2;i++)
{
hash1[ransomNote[i]-'a']++;
}
for(i=0;i<26;i++)
{
if(hash1[i]!=0&&hash1[i]>hash2[i])
{
return false;
}
}
return true;
}
4.时间复杂度:O(m+n+k),m和n为字符串的长度,最多比较k=26次
空间复杂度:O(k+k),开辟了两个数组,k为26