1. 程式人生 > >383. Ransom Note【easy】

383. Ransom Note【easy】

begin logs char rar assume ron return code color

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 的代碼

383. Ransom Note【easy】