当前位置:网站首页>赎金信问题答记

赎金信问题答记

2022-08-10 19:05:00 小问号我们是朋友

给定题干:

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

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

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

题目来源:

力扣(LeetCode)
 


1.示例

代码如下(示例):

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

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

2.解答与注记

代码如下(Java):

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        
        int rLen = ransomNote.length();
        int mLen = magazine.length();
        char[] rChr = ransomNote.toCharArray();
        char[] mChr = magazine.toCharArray();

        // 如果ransomNote的长度大于magazine的长度,则ransomNote不能由magazine里面的字符构成。
        if(rLen > mLen) {
            return false;
        }

        // 建立一个计数数组,用以存放各个字母出现的次数。该数组的索引为0-25,索引值可由ASCII表中a-z的值97-122中任意两个作差得出。
        int[] cInt = new int[26];
        
        // 分别循环遍历俩个字符数组,在magazine中出现该字母时计数数组的值加一,在ransomNote中出现该字母时计数数组的值减一。
        for(char c:mChr) {

            // c - 'a'表示取到当前字符ASCII码与字符'a'ASCII码的差值,既为该字符在计数数组中的索引。
            cInt[c - 'a']++;
        }
        for(char c:rChr) {
            cInt[c - 'a']--;

            //若cInt[c - 'a']小于零,则ransomNote不能由magazine里面的字符构成。
            if(cInt[c - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}

3.ASCII表


 

总结

以上就是今天要讲的内容,本文介绍了赎金信问题的解决方法,在此备忘以供参考。

原网站

版权声明
本文为[小问号我们是朋友]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43055101/article/details/126241273