Leetcode 383.赎金信(C++)

本来看到题的第一眼以为是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),额外需要一个固定长度的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值