383. 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
题目解读:
题目叫做Ransom Note,勒索信,为了不暴露字迹,就从杂志上搜索各个需要的字母,组成单词来表达的意思。这样来说,题目也就清晰了,判断杂志上的字是否能够组成勒索信需要的那些字符。 这里需要注意的就是杂志上的字符只能被使用一次,不过不用考虑大小写的问题。 有一种最简单的理解就是对于ransomNote里每个字符出现的次数必须小于或者等于该字符在magazine出现的次数。下面是代码(java):
java:
public class Solution {
//原理就是列出了magazine的字母表,然后算出了出现个数,然后遍历ransomNote,保证有足够的字母可用,代码非常清晰。
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;
}
}