leetCode Ransom Note

1、题目描述

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.

 

You may assume that both strings contain only lowercase letters.

 canConstruct("a", "b") -> false

canConstruct("aa", "ab") -> false

canConstruct("aa", "aab") -> true

 

输入两个string ,判断第二个string是否能构造出第一个字符。

2、问题分析

如果第一个string 中的每个 字符都可以在 第二个字符中找到,并且该字符在第一个string中的数量少于在第二个string中的数量,则第二的string可以构造出第一个string。

使用两个 map , ,map<char,int> 存储在每个string中对应的字符的出现次数。然后对比两个map 。

 

3、代码

 

 1  bool canConstruct(string ransomNote, string magazine) {
 2         
 3         map<char,int> mR;
 4         for(char &c : ransomNote)
 5            mR[c]++;
 6         
 7         map<char,int> mM;
 8         for(char &c : magazine)
 9             mM[c]++;
10         
11         for(auto it : mR )
12             if(it.second > mM[it.first])
13                 return false;
14         return true;
15         
16     }

 

posted @ 2018-03-28 17:52  山里的小勇子  阅读(139)  评论(0编辑  收藏  举报