给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
1 <= ransomNote.length, magazine.length <= 105
ransomNote
和magazine
由小写英文字母组成
题解
因为两个字符串都是由小写字母组成,那就确定了出现的字母最多只会有26个,并且这26个字母是连续的,因此可以用空间大小为26的数组来存储每个字母出现的次数,下标从0 到25 分别代表从a 到z。
分别遍历这两个字符串,最后遍历结果数组,如果里面有小于0的数,说明不能组成赎金信。
class Solution {
public boolean canConstruct(String s, String t) {
int [] hash=new int [26];
for(int i=0;i<s.length();i++){
hash[s.charAt(i)-'a']++;
}
for(int j=0;j<t.length();j++){
hash[t.charAt(j)-'a']--;
}
for(int n:hash){
if(n>0){
return false;
}
}
return true;
}
}