南宁cms建站谷歌收录查询工具
原题链接:383.赎金信
根据题意得出,需要判断第一个字符串内的字符有没有都在第二个字符串内出现(会有重复字符),并且范围限制在26个英文小写字母
此时可以考虑用一个数组map 作哈希法映射操作
先将遍历第一个字符串,并让每个字符减去’a’,此时数组map的下标范围就为0~25,再进行++即可
然后遍历第二个字符串,遍历时让第二个字符串中的每个字符减去’a’,再进行–,这时可以进行判断map[i]的值是不是大于0,然后返回false因为只有大于0的情况,才代表第一个字符串内存在第二个字符串中没有的字符
如果遍历完没有返回false,那么就代表第一个字符串内的字符都在第二个字符串内出现过,所以然会true
全代码:
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {int map[26] = {0};for(int i = 0; i < ransomNote.size(); i++){//map[i] - 'a'代表的是当前英文字符减去 'a' ASCII码,范围是在0~25,不理解可以带入ASCII码实数进行计算map[ransomNote[i] - 'a']++;}for(int i = 0; i<magazine.size(); i++){map[magazine[i] - 'a']--;if(map[i] > 0){return false;}}return true;}
};