首页 > 其他 > 详细

[LeetCode] NO.383 Ransom Note

时间:2016-08-14 16:19:19      阅读:262      评论:0      收藏:0      [点我收藏+]

[题目] 

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.

You may assume that both strings contain only lowercase letters.

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true

[题目解析] 首先明确题意,两个字符串,第一个字符串中的字母都是从第二个字符串中取得的。可以使用hashmap,将第一个字符串读取入hashmap,key是字符,value是对应该字符的个数。

然后遍历第二个字符串,对hashmap进行操作,依次对hashmap中含有的字符个数进行--,如果个数<0,则说明map中(即第一个字符中)含有的字符,在第二个字符串中没有覆盖到。代码如下。

public  boolean canConstruct(String ransomNote, String magazine)  {
        Map charmap = new HashMap<Character,Integer>();
        for(int index = 0; index < magazine.length(); index++){
            char tmp = magazine.charAt(index);
            if(charmap.containsKey(tmp)){
                int count = (int) charmap.get(tmp);
                count++;
                charmap.put(tmp, count);
            }else{
                charmap.put(tmp, 1);
            }
        }
        for(int index = 0; index < ransomNote.length(); index++){
            char tmp = ransomNote.charAt(index);
            if(charmap.containsKey(tmp)){
                int count = (int) charmap.get(tmp);
                count--;
                if(count < 0) return false;
                charmap.put(tmp, count);
            }else{
                return false;
            }
        }
        return true;
}

        考虑到字符串中只有小写字母,我们可以优化下代码,整体思路不变。代码如下。

 public boolean canConstruct(String ransomNote, String magazine) {
        int[] arr = new int[26];
        for (int i = 0; i < magazine.length(); i++) {
            arr[magazine.charAt(i) - ‘a‘]++;
        }
        for (int i = 0; i < ransomNote.length(); i++) {
            if(--arr[ransomNote.charAt(i)-‘a‘] < 0) {
                return false;
            }
        }
        return true;
  }

 

[LeetCode] NO.383 Ransom Note

原文:http://www.cnblogs.com/zzchit/p/5770355.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!