算法:赎金信解题思路 现在有两个字符串要判断一个字符串中的字符能否由另一个字符串的字符构成如果可以返回true否则返回false。magazine中的每个字符只能在ransomNote中使用一次。示例 输入ransomNote a, magazine b 输出false解法class Solution { public: bool canConstruct(string ransomNote, string magazine) { // 统计 magazine 中每个字母的出现次数 vectorint count(26, 0); for (char c : magazine) { count[c - a]; } // 遍历 ransomNote检查是否能用 magazine 的字母拼出 for (char c : ransomNote) { int idx c - a; if (count[idx] 0) { return false; // 这个字母不够用了 } count[idx]--; // 用掉一个 } return true; } };时间复杂度O(n m)其中 n 是magazine长度m 是ransomNote长度。只需要遍历两个字符串各一次。空间复杂度O(1)常数空间因为数组大小固定为 26不随输入规模变化。解题思路第一步存货统计magazine遍历magazine执行count[magazine[i] - a]将字母映射到 0~25 的索引计数加一。第二步消耗校验ransomNote遍历ransomNote执行count[ransomNote[i] - a]--。在减之前先判断如果count[idx] 0说明杂志里没这个字母了或者用完了直接return false。如果大于 0减掉继续。