leetcode 383. Ransom Note

来源:互联网 发布:linux 脚本 关闭程序 编辑:程序博客网 时间:2024/06/04 23:19

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") -> falsecanConstruct("aa", "ab") -> falsecanConstruct("aa", "aab") -> true
这个题嘛,很简单。

package leetcode;public class Ransom_Note_383 {public boolean canConstruct(String ransomNote, String magazine) {int[] magazineChars=new int[26];char[] chars1=ransomNote.toCharArray();char[] chars2=magazine.toCharArray();for(int i=0;i<chars2.length;i++){int index=chars2[i]-'a';magazineChars[index]++;}for(int i=0;i<chars1.length;i++){int index=chars1[i]-'a';magazineChars[index]--;if(magazineChars[index]<0){return false;}}return true;}public static void main(String[] args) {// TODO Auto-generated method stubRansom_Note_383 r=new Ransom_Note_383();System.out.println(r.canConstruct("aa", "aab"));}}
我的解法beat了98%的java submissions.

大神有解法跟我一样的,也有用map的。

public boolean canConstruct(String ransomNote, String magazine) {        Map<Character, Integer> magM = new HashMap<>();        for (char c:magazine.toCharArray()){            int newCount = magM.getOrDefault(c, 0)+1;            magM.put(c, newCount);        }        for (char c:ransomNote.toCharArray()){            int newCount = magM.getOrDefault(c,0)-1;            if (newCount<0)                return false;            magM.put(c, newCount);        }        return true;}

原创粉丝点击