LeetCode 383. Ransom Note 自己的解法
2017-09-06 18:02
351 查看
题目
这个Ransom Note不知道怎么翻译好,算了不用在意这些细节我们直接读题目吧。题目的大致意思是,给定一个字符串a,然后再给定一个字符串b,判断b能不能由a构建出来。假定字符串中字符都是小写。分析
怎么理解这个构建呢,我的理解是,字符串b中必须含有字符串a中的字符,而且必须全部都有。而且,字符串b中含有字符串a中的字符的个数必须不小于字符串a中的个数。这样我们就构造出两个判断条件:
1、字符串b的字符种类至少要和字符串a相同,可以多但是不能少;
2、字符串b含有字符串a中字符的个数至少要和字符串a相同;
代码
public class Solution { public boolean canConstruct(String ransomNote, String magazine) { //这里构造两个HashMap, Map<Character,Integer> map = new HashMap<>(); Map<Character,Integer> buket = new HashMap<>(); //得到ransomNote中所有字符的个数 for(int i=0;i<ransomNote.length();i++){ if(map.containsKey(ransomNote.charAt(i))){ map.put(ransomNote.charAt(i),map.get(ransomNote.charAt(i))+1); } else{ map.put(ransomNote.charAt(i),1); } } //同理,得到magazine中所有字符的个数 for(int i=0;i<magazine.length();i++){ if(buket.containsKey(magazine.charAt(i))){ buket.put(magazine.charAt(i),buket.get(magazine.charAt(i))+1); } else{ buket.put(magazine.charAt(i),1); } } //根据以上两个条件作出判断, for(Map.Entry<Character, Integer> entry : map.entrySet()){ if(!buket.containsKey(entry.getKey())){ return false; } if(buket.get(entry.getKey())<entry.getValue()){ return false; } } return true; } }
这个代码的时间复杂度是线性的,空间复杂度也是线性的。
相关文章推荐
- LeetCode383. Ransom Note优雅解法(线性时间复杂度)
- LeetCode383. Ransom Note
- LeetCode 383. Ransom Note
- leetcode 383. Ransom Note
- leetcode题解-58. Length of Last Word && 67. Add Binary && 383. Ransom Note
- LeetCode解题报告 383. Ransom Note [easy]
- Leetcode——383. Ransom Note
- leetcode 383. Ransom Note
- leetcode-383. Ransom Note
- LeetCode-383. Ransom Note
- Leetcode - String - 383. Ransom Note(水题)
- LeetCode 383. Ransom Note
- LeetCode-383. Ransom Note (Java)
- LeetCode-Easy部分中标签为String 383. Ransom Note
- leetcode(383. Ransom Note)
- LeetCode 383. Ransom Note
- [leetcode]: 383. Ransom Note
- LeetCode 383. Ransom Note
- LeetCode 383. Ransom Note
- leetcode_383. Ransom Note-近似子串问题