LeetCode 383 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)
例子:
输入:ransomNote = “aa”, magazine = “aab”
输出:true
Java:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] x=new int[26];
for(int i=0;i<ransomNote.length();i++){
x[ransomNote.charAt(i)-'a']++;
}
for(int j=0;j<magazine.length();j++){
x[magazine.charAt(j)-'a']--;
}
for(int i=0;i<26;i++){
if(x[i]>0)
return false;
}
return true;
}
}
思路:
哈希表
(1)构造26位哈希表;
(2)ransom中字母出现频次++
magazine中字母出现频次–
(3)如果ransom能由magaz中字符构成,最终哈希表中无正数;若有正数,说明ransom不能由magaz中字符构成
eg:ransomNote = “aa”, magazine = “aab”
x[0] x[1] x[2]…x[26]
++后:x[0]=2 x[1]=0 x[2]=0…x[26]=0
执行–操作后:x[0]=0 x[1]=-1 x[2]=0…x[26]=0
返回true