本来看到题的第一眼以为是KMP,后来再读题发现对于要匹配的字符串没有要求顺序,于是就数组走起~
普通解法:暴力
取出ransomNote字符串中每一个字符在magazine中找匹配
时间复杂度O(n^2),两层循环嵌套
空间复杂度O(1),不需要额外的空间
hash解法
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
bool ans=true;
int num[27]={0};
int len1=magazine.length();
int len2=ransomNote.length();
if(len1<len2) //小优化,直接排除magazine长度小于ransomNote情况
ans=false;
else{
for(int i=0; i<len1; i++)
num[magazine[i]-'a']++;
for(int i=0; i<len2; i++){
if(num[ransomNote[i]-'a']==0){
ans=false;
break;
}
num[ransomNote[i]-'a']--;
}
}
return ans;
}
};
时间复杂度O(n)
空间复杂度O(1),额外需要一个固定长度的数组