数据结构-383. 赎金信

159 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b" 输出:false 示例 2:

输入:ransomNote = "aa", magazine = "ab" 输出:false 示例 3:

输入:ransomNote = "aa", magazine = "aab" 输出:true

提示:

1 <= ransomNote.length, magazine.length <= 105 ransomNote 和 magazine 由小写英文字母组成

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ra… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

判断 ransomNote 能不能由 magazine 里面的字符构成。 并且说明了每个字符仅可以使用一次,其实就是判断magazine是否包含ransomNote的全部字符,并且每个字符数量要大余ransomNote。

具体过程:

创建一个长度26的int数组代表26个字母 循环遍历两个需要传入的字符串 字符串1中,遍历到的字母在int数组中对应的值-1 字符串2中,遍历到的字母在int数组中对应的值+1 若是int数组每一位的值都不小于0,则 字符串1 可被字符串2 组成,返回true

三、AC代码

class Solution {
        public boolean canConstruct(String ransomNote, String magazine) {
              //判断 ransnmNote 能不能由 magazine 中字符构成
        int[] ints = new int[26];
        for (int i = 0;i<ransomNote.length();i++){
            ints[ransomNote.charAt(i)-97]--;
        }
        for (int i=0;i<magazine.length();i++){
            ints[magazine.charAt(i)-97]++;
        }
        for (int data:ints){
            if (data<0){
                return false;
            }
        }
        return true;
    }
}

四、总结:

image.png

掘友们,解题不易,如果觉得有用就留下个赞或评论再走吧!谢啦~ 💐