给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
题目解析:
我们可以用一个数组记录26字母在magazine中出现的次数,然后再遍历ransomNote判断数组对应字母是否有出现,若有则出现次数减一,否则返回false
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
//记录26个字母中每个字母出现的次数
int[] arr = new int[26];
for (int i = 0; i <magazine.length() ; i++) {
//根据索引确定是哪个字母,然后对应字母的出现次数+1
int suoyin = magazine.charAt(i) - 'a';
arr[suoyin]=arr[suoyin]+1;
}
for (int i = 0; i <ransomNote.length() ; i++) {
//arr数组中记录了magazine中每个字母的出现次数
//若arr中没有ransomNote中的字母则返回false,若有则消耗一次出现次数
int suoyin2 = ransomNote.charAt(i) -'a';
if (arr[suoyin2]>0){
arr[suoyin2]=arr[suoyin2]-1;
}else {
return false;
}
}
return true;
}
}
运行结果: