【LeetCode】第32天 - 383. 赎金信

x33g5p2x  于2021-12-06 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(219)

题目描述

解题思路

这道题就是判断判断 ransomNote 能不能由 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。

  • 首先我们可以遍历magazine,统计magazine中各字符出现的次数,并用数组count存储起来。
  • 然后再遍历ransomNote ,将ransomNote[i]在magazine中出现的次数减1,当次数小于0时,说明magazine中不包含该字符,即ransomNote 不能由 magazines 里面的字符构成。

代码实现

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        if(magazine.length()<ransomNote.length()){      //magazine 的长度小于ransomNote的长度,一定不满足
            return false;
        }

        int[] count = new int[26];
        for(int i=0;i<magazine.length();i++){       //统计magazine中各字符出现的次数
            ++count[magazine.charAt(i) - 'a'];
        }

        for(int i=0;i<ransomNote.length();i++){
            --count[ransomNote.charAt(i) - 'a'];        //将该字符在magazine中出现的次数减1
            if(count[ransomNote.charAt(i) - 'a']<0){        //如果次数小于0,不满足返回false
                return false;
            }
        }

        return true;
    }
}

相关文章