LeetCode解题报告 383. Ransom Note [easy]
2016-12-23 01:05
477 查看
题目描述
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") -> false canConstruct("aa", "ab") -> false canConstruct("aa", "aab") -> true
解题思路
判断第一个字符串能否由第二个字符串中的字符构造,第二个字符串中每个字母只能用一次。最简单的方法,两个循环,时间复杂度为O(N),代码如下:
class Solution { public: bool canConstruct(string ransomNote, string magazine) { int a=ransomNote.size(); int b=magazine.size(); int visit[b]; for (int k=0; k<b; k++) { visit[k]=0; } int count = 0; for (int i=0; i< a ; i++) { for (int j=0; j< b ; j++) { if (magazine[j]==ransomNote[i]&&visit[j]==0) { visit[j]=1; count++; break; } } } if (count==a) { return true; } else return false; } };
优化成O(n)的方法为,用一个长度为26的数组,记录magezine字符串中a-z每个字母出现的个数,再用这个个数不断减去ransomNote中相同字母的个数,当减到<0时,即返回false。
代码如下:
class Solution { public: bool canConstruct(string ransomNote, string magazine) { int a=ransomNote.size(); int b=magazine.size(); int letter_num[26]={0}; for (int i=0; i< b ; i++) { letter_num[magazine[i]-'a']++; } for (int j=0; j< a ; j++) { letter_num[ransomNote[j]-'a']--; if (letter_num[ransomNote[j]-'a']<0) { return false; } } return true; } };
相关文章推荐
- leetcode 383. Ransom Note 解题报告
- [leetcode] 383. Ransom Note 解题报告
- 【LeetCode】383.Ransom Note(Easy)解题报告
- Leetcode 383. Ransom Note 构造字符串 解题报告
- [Leetcode] 383. Ransom Note 解题报告
- LeetCode 383. Ransom Note 解题报告
- 【LeetCode】687.Longest Univalue Path(Easy)解题报告
- LeetCode解题报告 112. Path Sum [easy]
- 【LeetCode】107.Binary Tree Level Order Traversal II(Easy)解题报告
- 【LeetCode】653.Two Sum IV - Input is a BST(Easy)解题报告
- LeetCode解题报告 101. Symmetric Tree [easy]
- 【LeetCode】270.Closest Binary Search Tree Value(Easy)解题报告
- 【LeetCode】257.Binary Tree Paths(Easy)解题报告
- 【LeetCode】108.Convert Sorted Array to Binary Search Tree(Easy)解题报告
- 【LeetCode】160.Intersection of Two Linked Lists(Easy)解题报告
- 【LeetCode】110. Balanced Binary Tree(Easy)解题报告
- 【LeetCode】14.Longest Common Prefix(Easy)解题报告
- 【LeetCode】9.Palindrome Number(Easy)解题报告
- LeetCode解题报告 70. Climbing Stairs [easy]
- 【LeetCode】88.Merge Sorted Array(easy)解题报告