【LeetCode-Simple question】383. Ransom letter

topic

Insert image description here

Method 1: Array

  1. First convert the characters in the magazine to the number of characters in an array of size 26
  2. 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;
    }
}

Guess you like

Origin blog.csdn.net/weixin_45618869/article/details/132850088