题目
为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。
给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。
如果可以构成,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例
-
示例一
输入:ransomNote = “a”, magazine = “b”
输出:false -
示例二
输入:ransomNote = “aa”, magazine = “ab”
输出:false -
示例三
输入:ransomNote = “aa”, magazine = “aab”
输出:true
方法
字符统计
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] alphabet = new int[26];
for(int i=0;i<ransomNote.length();i++){
alphabet[ransomNote.charAt(i)- 'a']++;
}
for(int i=0;i<magazine.length();i++){
alphabet[magazine.charAt(i)- 'a']--;
}
for(int x:alphabet){
if(x > 0){
return false;
}
}
return true;
}
}
1 使用alphabet数组记录各个字母出现次数。
2 字母在ransomNote出现一次,便在alphabet中对应位置+1
3 字母在magazine出现一次,便在alphabet中对应位置-1
4 若存在某个字母对应位置仍>1,说明magazine中缺少字母
5 若存在某个字母对应位置<=0,说明magazine中有足够字母或多余字母
注意
- alphabet 数组长度为26,其下表对应26个字母。
- 存入alphabet 数组中时,计算对应字母与字符 ‘a’ 的距离,从而作为数组的下标。( charAt() 返回的时字符类型)。