热门IT资讯网

leetCode 383. Ransom Note 字符串

发表于:2024-11-26 作者:热门IT资讯网编辑
编辑最后更新 2024年11月26日,383. Ransom NoteGiven an arbitrary ransom note string and another string containing letters from all

383. Ransom Note

Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.

Each letter in the magazine string can only be used once in your ransom note.

Note:
You may assume that both strings contain only lowercase letters.

canConstruct("a", "b") -> falsecanConstruct("aa", "ab") -> falsecanConstruct("aa", "aab") -> true

题目大意:

有一个随机串,有一个大串。判断随机串是否为大串的组成部分。

随机串某一字符的个数必须小于大串。随机串中出现的字符大串中必须都有。

思路:

用map/unordered_map来处理大串,将字符的个数以及种类记录在map/unordered_map中。然后进行判断。

代码如下:

class Solution {public:    bool canConstruct(string ransomNote, string magazine) {        if(ransomNote.size() == 0)            return true;        unordered_map m;        for(int i = 0;i < magazine.size();i++)        {            m[magazine[i]]++;        }        for(int i = 0 ; i < ransomNote.size(); i++)        {            if(m.find(ransomNote[i]) == m.end() || m[ransomNote[i]] == 0 )                return false;            m[ransomNote[i]]--;        }                return true;    }};

经过测试126组数据,使用map耗时132ms,使用unordered_map耗时84ms。所以在不需要map有序的情况下,使用unordered_map是首选。


0