1 题目地址
2 题目说明
给你两个字符串:
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
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote
和magazine
由小写英文字母组成
3 解题思路
方式一:使用哈希数组处理
其实就是判断magazine里面的字符是否包含ransomNote
里面的所有字符
1 使用数组存放magazine的元素,索引下标对应元素相对值,值存放个数
,查询数组对应位置是否有,有则减一,无则直接返回false
2 遍历ransomNote
方式二:暴力方式两层循环,不断去寻找,找到则移除对应位置的元素即可,无则直接返回false
4 代码编写
4.1 使用哈希-Map处理
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] a = new int[26];
for (int i=0; i<magazine.length(); i++) {
int index = magazine.charAt(i) - 'a';
a[index]++;
}
for (int i=0; i<ransomNote.length(); i++) {
int index = ransomNote.charAt(i) - 'a';
if (a[index] < 1) {
return false;
}
a[index]--;
}
return true;
}
}