leetcode Ransom Note
Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.
Each letter in the magazine string can only be used once in your ransom note.
Note: You may assume that both strings contain only lowercase letters.
2
3
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true
题目地址:leetcode Ransom Note
题目大意:给定两个字符串magazines和ransomNote,问是否可以从magazines中抽取字母(每个字母只能用一次)组成ransomNote
思路:只要判断ransomNote字符是不是全部在magazines中即可,用hash。。 水
C++ 1
2
3
4
5
6
7
8
9class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        vector<int> cnt(26,0);
        for(char x:magazine) cnt[x-97]++;
        for(char x:ransomNote) if(--cnt[x-97] < 0) return false;
        return true;
    }
};
Java 1
2
3
4
5
6
7
8public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] cnt = new int[26];
        for (int i = 0; i < magazine.length(); i++) cnt[magazine.charAt(i) - 97]++;
for (int i = 0; i < ransomNote.length(); i++) if (--cnt[ransomNote.charAt(i) - 97] < 0) return false;
return true;
    }
}
Python 1
2
3
4
5
6
7
8
9
10
11
12class Solution(object):
    def canConstruct(self, ransomNote, magazine):
        """
        :type ransomNote: str
        :type magazine: str
        :rtype: bool
        """
        cnt = collections.Counter(magazine)
        for letter in ransomNote:
            cnt[letter] -= 1
            if cnt[letter] <0: return False
        return True
本题是leetcode 383 Ransom Note 的题解
更多题解可以查看:https://www.hrwhisper.me/leetcode-algorithm-solution/
 
        