给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
if (ransomNote.Length > magazine.Length)
return false;
//表示26个字母
int[] ct = new int[26];
//把存在的字母做加法
foreach (var item in magazine)
{
ct[item - 'a']++;
}
foreach (var item in ransomNote)
{
//把对比的字符 做减法 判断是否满足条件
ct[item-'a']--;
if (ct[item-'a'] < 0)
{
return false;
}
}
return true;
解题思路:
如果字符串magazine 的长度小于字符串ransomNote 的长度,则我们可以肯定 magazine 无法构成 ransomNote,此时直接返回false。
首先统计magazine 中每个英文字母 aa 的次数 cnt[a],再遍历统计 ransomNote 中每个英文字母的次数,如果发现ransomNote 中存在某个英文字母 cc 的统计次数大于 magazine 中该字母统计次数 cnt[c],则此时我们直接返回false。