码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Ransom Note_383

时间:2016-09-24 23:11:23      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

LeetCode:Ransom Note

【问题再现】

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

【优质算法】

public class Solution {
    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;
    }
}

【题后反思】

  本题用到了统计字符出现频率的数组计数器,这种实现最为简单,不做解释。

  我做这道题的时候考虑了magazine要按照Ransom的顺序,结果一直通不过,把问题想的复杂化了。

    public static boolean canConstruct(String ransomNote, String magazine) {
        int Sp = 0;
        int Lp = 0;
        int count = 0;

        while (Lp < magazine.length()) {
            if(Sp==ransomNote.length())
                break;
            if (ransomNote.charAt(Sp)==magazine.charAt(Lp)) {
                count++;
                System.out.print(ransomNote.charAt(Sp));
                Sp++;
                Lp++;
            } else
                Lp++;
            }
        if (count == ransomNote.length())
            return true;
        else
            return false;

  这种题目也可以利用HashMap来计算:

  

public static boolean canConstruct(String ransomNote, String magazine) {
        HashMap<Character,Integer> myMap = new HashMap<>();
        for(int i=0;i<magazine.length();i++)
        {
            if(myMap.containsKey(magazine.charAt(i)))
                myMap.put(magazine.charAt(i),myMap.get(magazine.charAt(i))+1);
            else
                myMap.put(magazine.charAt(i),1);
        }


        for(int i=0;i<ransomNote.length();i++)
        {
            if(myMap.containsKey(ransomNote.charAt(i)))
            {
                myMap.put(ransomNote.charAt(i),myMap.get(ransomNote.charAt(i))-1);
                if(myMap.get(ransomNote.charAt(i))<=0)
                    return false;
            }
            else
                return false;
        }
        return true;
    }

 

LeetCode:Ransom Note_383

标签:

原文地址:http://www.cnblogs.com/MrSaver/p/5904230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!