题目:leetcode383. 赎金信

描述:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = “a”, magazine = “b”
输出:false

示例 2:

输入:ransomNote = “aa”, magazine = “ab”
输出:false

示例 3:

输入:ransomNote = “aa”, magazine = “aab”
输出:true

思路:
因为只能是小写字母,所以使用一个长度为26的数组来模拟哈希,数组的下标对应字母,数组的值对应这个字母出现的次数。识别magazine里面有的字母保存到哈希数组,然后识别ransomNote里面的字母,将哈希数组里面的字母个数减一。最后查看是否存在负数,如果有负数,说明不能构成。



public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        if(ransomNote.length()>magazine.length())
            return false;
        int[] hash=new int[26];
        for (char c:magazine.toCharArray())
            hash[c-'a']+=1;
        for (char c:ransomNote.toCharArray())
            hash[c-'a']-=1;
        for(int i:hash)
            if(i<0)
                return false;
        return true;
    }
}
08-14 00:29