Article directory
topic
Method 1: Array
- First convert the characters in the magazine to the number of characters in an array of size 26
- Then traverse the characters in randomNote, and let the number of characters - 1 for each character traversed. If the number of characters is <0, it means that the string of magazine does not completely contain ransomNote.
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if(ransomNote.length() > magazine.length()) return false;
int[] mag = new int[26];
for(char ch : magazine.toCharArray())
mag[ch-'a']++;
for(char sh :ransomNote.toCharArray()){
mag[sh-'a']--;
if( mag[sh-'a'] < 0 ) return false;
}
return true;
}
}
Method 2: Hash table
Similar method one
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if(ransomNote.length() > magazine.length()) return false;
Map<Character,Integer> map = new HashMap<>();
for(char s : magazine.toCharArray()){
if(!map.containsKey(s)) map.put(s,1);
else map.put(s,map.get(s)+1);
}
for(char s1 : ransomNote.toCharArray()){
if( !map.containsKey(s1) ) return false;
map.put(s1,map.get(s1)-1);
if(map.get(s1) < 0) return false;
}
return true;
}
}