题目

类型:哈希表
image.png

解题思路

核心点:只需要满足字符串 magazine 中的每个英文字母的统计次数都大于等于 ransomNote 中相同字母的统计次数即可。

1、如果字符串magazine 的长度小于字符串 ransomNote 的长度,则可以肯定 magazine 无法构成 ransomNote,此时直接返回 false。
2、首先统计 magazine 中每个英文字母的次数 cnt[],再遍历统计 ransomNote 中每个英文字母的次数,如果发现 ransomNote 中存在某个英文字母的统计次数大于 magazine 中该字母统计次数cnt[],则此时直接返回 false。

代码

  1. class Solution {
  2. public boolean canConstruct(String ransomNote, String magazine) {
  3. if (ransomNote.length() > magazine.length()) {
  4. return false;
  5. }
  6. int[] cnt = new int[26];
  7. for (char c : magazine.toCharArray()) {
  8. cnt[c - 'a']++;
  9. }
  10. for (char c : ransomNote.toCharArray()) {
  11. cnt[c - 'a']--;
  12. if(cnt[c - 'a'] < 0) {
  13. return false;
  14. }
  15. }
  16. return true;
  17. }
  18. }