383. Ransom Note【easy】
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.
canConstruct("a", "b") -> false canConstruct("aa", "ab") -> false canConstruct("aa", "aab") -> true
解法一:
1 class Solution { 2 public: 3 bool canConstruct(string ransomNote, string magazine) { 4 map<char, int> m_rans; 5 6 for (int i = 0; i < ransomNote.length(); ++i) { 7 ++m_rans[ransomNote[i]]; 8 } 9 10 for (int i = 0; i < magazine.length(); ++i) { 11 if (m_rans.find(magazine[i]) != m_rans.end()) { 12 --m_rans[magazine[i]]; 13 } 14 } 15 16 for (map<char, int>::iterator it = m_rans.begin(); it != m_rans.end(); ++it) { 17 if (it->second > 0) { 18 return false; 19 } 20 } 21 22 return true; 23 } 24 };
解法二:
1 public class Solution { 2 public boolean canConstruct(String ransomNote, String magazine) { 3 int[] arr = new int[26]; 4 for (int i = 0; i < magazine.length(); i++) { 5 arr[magazine.charAt(i) - 'a']++; 6 } 7 for (int i = 0; i < ransomNote.length(); i++) { 8 if(--arr[ransomNote.charAt(i)-'a'] < 0) { 9 return false; 10 } 11 } 12 return true; 13 } 14 }
参考@yidongwang 的代码。
解法三:
1 class Solution { 2 public: 3 bool canConstruct(string ransomNote, string magazine) { 4 unordered_map<char, int> map(26); 5 for (int i = 0; i < magazine.size(); ++i) 6 ++map[magazine[i]]; 7 for (int j = 0; j < ransomNote.size(); ++j) 8 if (--map[ransomNote[j]] < 0) 9 return false; 10 return true; 11 } 12 };
参考@haruhiku 的代码
解法四:
1 class Solution { 2 public: 3 bool canConstruct(string ransomNote, string magazine) { 4 vector<int> vec(26, 0); 5 for (int i = 0; i < magazine.size(); ++i) 6 ++vec[magazine[i] - 'a']; 7 for (int j = 0; j < ransomNote.size(); ++j) 8 if (--vec[ransomNote[j] - 'a'] < 0) 9 return false; 10 return true; 11 } 12 };
参考@haruhiku 的代码