【力扣 Java】383. 赎金信

博客主页:准Java全栈开发工程师
00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小、觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为了去掌控球体的转向,而是当有人恶意掌控时,努力保护好家人和自己。

赎金信

  • 题目描述
  • 示例演示
      • 示例一
      • 示例二
      • 示例三
      • 示例四
  • 算法思想
  • 算法代码

题目描述

  • 两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
  • 如果可以,返回 true ;否则返回 false 。
  • magazine 中的每个字符只能在 ransomNote 中使用一次。

注意:

  • 只要字符数够就行,不需要是连续的。

示例演示

示例一

输入:ransomNote = “a”, magazine = “b”
输出:false

示例二

输入:ransomNote = “aa”, magazine = “ab”
输出:false

示例三

输入:ransomNote = “aa”, magazine = “aab”
输出:true

示例四

输入:ransomNote = “aa”, magazine = “aba”
输出:true

算法思想

  • String 提供有 contains 方法,该方法用于判断当前字符串是否包含指定字符序列,此处的包含是连续包含,包含则返回true。符合该方法的示例,也一定会满足题目要求,可以直接返回true。
  • 判断两个字符串间的长度关系,如果 ransomNote 字符串的长度更长,则直接返回false,从个数上就可以判断出不符合题目要求。
  • 如果不符合上述两个特例,则使用常规方法判断,先统计 magazine 字符串中每个字符出现的次数,存储到 HashMap 中。
  • 然后遍历 ransomNote 字符串,判断所需字符是否出现在 map 集合中出现且个数是否满足,如果有不满足的情况,直接返回false,如果遍历一遍之后还没有返回,则说明满足题目要求,返回true。
  • HashMap集合中的方法 getOrDefault( key,defaultValue )。该方法用于获得指定 key 对应的 value,如果该键的映射不存在(第一次执行 put 操作时会出现映射不存在的情况),则返回 defaultValue 默认值。

算法代码

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        if ( magazine.contains(ransomNote) ){
            return true;
        }
        if (ransomNote.length() > magazine.length()){
            return false;
        }
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < magazine.length(); i++){
            map.put(magazine.charAt(i),map.getOrDefault(magazine.charAt(i),0) + 1);
        }
        for (int i = 0; i < ransomNote.length(); i++){
            if ( !map.containsKey(ransomNote.charAt(i)) ){
                return false;
            }
            if (map.get(ransomNote.charAt(i)) - 1 < 0){
                return false;
            }
            map.replace(ransomNote.charAt(i),map.get(ransomNote.charAt(i))-1);
        }
        return true;
    }
}

以上就是文章的全部内容啦,诸佬如果有任何建议都可以提哦。
创作不易,如果觉得对您有帮助的话,欢迎关注✨点赞收藏哦。

你可能感兴趣的:(力扣,Java,leetcode,java,算法,数据结构,散列表)