思路:
因为题目说明字符串中只含有小写英文字母,所以创建两个数组分别统计ransomNote和magazine中a-z的个数
若存在r[i]>m[i] 返回false
否则返回true
解题方法:
r[26]存储ransomNote中a-z字符个数
m[26]存储magazine中a-z字符个数
若存在r[i]>m[i] 返回false
否则返回true
时间复杂度: O(n)
空间复杂度:O(1)
code
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int r[]=new int[26];
int m[]=new int[26];
char ch;
int po;
for(int i=0;i<ransomNote.length();i++){
ch=ransomNote.charAt(i);
po=ch-'a';
r[po]=r[po]+1;
}
for(int i=0;i<magazine.length();i++){
ch=magazine.charAt(i);
po=ch-'a';
m[po]=m[po]+1;
}
boolean flag=true;
int i=0;
while(i<26){
if(r[i]>m[i]){
flag=false;
break;
}
i++;
}
if(flag==true) return true;
else return false;
}
}
官方答案:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()) {
return false;
}
int[] cnt = new int[26];
for (char c : magazine.toCharArray()) {
cnt[c - 'a']++;
}
for (char c : ransomNote.toCharArray()) {
cnt[c - 'a']--;
if(cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
}
作者:力扣官方题解