题意描述
- 给定两个字符串,判断第一个字符串是否可以从第二个字符串构造出来,也就是说第一个字符串中的字符,都包含在第二个字符串当中
思路:map思想,统计第二个字符串中的字符,对应的字符的index的值+1,相反,遍历第一个字符串的字符,对应的字符的index的值-1,如果index的值小于0,则返回false
代码(注意思想的岔路,题目要求26个字符,仅包含lowercase letters)
123456789101112131415161718class Solution {public:bool canConstruct(string ransomNote, string magazine) {vector<int> flags(256, 0);for(int i = 0; i < magazine.size(); ++i) {int nums = (int)(magazine[i] - ' ');flags[nums] ++;}for(int i = 0; i < ransomNote.size(); ++i) {int nums = (int)(ransomNote[i] - ' ');flags[nums] --;if(flags[nums] < 0)return false;}return true;}};代码二(仅含有26的小写字母)
123456789101112131415161718class Solution {public:bool canConstruct(string ransomNote, string magazine) {vector<int> flags(26, 0);for(int i = 0; i < magazine.size(); ++i) {int nums = (int)(magazine[i] - 'a');flags[nums] ++;}for(int i = 0; i < ransomNote.size(); ++i) {int nums = (int)(ransomNote[i] - 'a');flags[nums] --;if(flags[nums] < 0)return false;}return true;}};代码三(优化转型)
123456789101112131415161718class Solution {public:bool canConstruct(string ransomNote, string magazine) {vector<int> flags(26, 0);for(int i = 0; i < magazine.size(); ++i) {int nums = static_cast<int>(magazine[i] - 'a');flags[nums] ++;}for(int i = 0; i < ransomNote.size(); ++i) {int nums = static_cast<int>(ransomNote[i] - 'a');flags[nums] --;if(flags[nums] < 0)return false;}return true;}};
第383题---Random Note
坚持原创技术分享,您的支持将鼓励我继续创作!