题目:leetcode383. 赎金信
描述:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:
输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:
输入:ransomNote = “aa”, magazine = “aab”
输出:true
思路:
因为只能是小写字母,所以使用一个长度为26的数组来模拟哈希,数组的下标对应字母,数组的值对应这个字母出现的次数。识别magazine里面有的字母保存到哈希数组,然后识别ransomNote里面的字母,将哈希数组里面的字母个数减一。最后查看是否存在负数,如果有负数,说明不能构成。
public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if(ransomNote.length()>magazine.length())
return false;
int[] hash=new int[26];
for (char c:magazine.toCharArray())
hash[c-'a']+=1;
for (char c:ransomNote.toCharArray())
hash[c-'a']-=1;
for(int i:hash)
if(i<0)
return false;
return true;
}
}