给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
1 class Solution { 2 public: 3 bool canConstruct(string ransomNote, string magazine) { 4 unordered_map<char, int> mp; 5 unordered_map<char, int> mp1; 6 //记录magazine里面出现的字符个数 7 for (const auto& ch : magazine) 8 { 9 mp[ch]++; 10 } 11 //记录ransomnote出现的字符个数 12 for (const auto& ch : ransomNote) 13 { 14 mp1[ch]++; 15 } 16 //比较mp和mp1,只有mp1所有的字符个数都小于等于mp,才返回true 17 for (const auto& ch : mp1) 18 { 19 if (mp.find(ch.first) == mp.end() || ch.second > mp.find(ch.first)->second) 20 { 21 return false; 22 } 23 } 24 return true; 25 } 26 bool canConstruct(string ransomNote, string magazine) { 27 int record[26] = { 0 }; 28 //add 29 if (ransomNote.size() > magazine.size()) { 30 return false; 31 } 32 for (int i = 0; i < magazine.length(); i++) { 33 // 通过recode数据记录 magazine里各个字符出现次数 34 record[magazine[i] - 'a'] ++; 35 } 36 for (int j = 0; j < ransomNote.length(); j++) { 37 // 遍历ransomNote,在record里对应的字符个数做--操作 38 record[ransomNote[j] - 'a']--; 39 // 如果小于零说明ransomNote里出现的字符,magazine没有 40 if (record[ransomNote[j] - 'a'] < 0) { 41 return false; 42 } 43 } 44 return true; 45 } 46 47 };
标签:ransomNote,字符,ch,magazine,383,mp,mp1,赎金 From: https://www.cnblogs.com/lihaoxiang/p/17180838.html