一、题目
二、题解
1.未通过代码
最开始想到的是通过双for来遍历ransomNote 和magazine,然后再逐一比较是否相等,但是在相等后却一直没有想出好的办法来判断进行下一步,java的API中也没有找到一个可以删除字符串的api,最后放弃这个方法。
class Solution {
public boolean canConstruct(String ransomNote , String magazine) {
for(int i=0;i<ransomNote.length();i++){
char a = ransomNote.charAt(i);
for(int j=0;j<magazine.length();j++){
if(a == magazine.charAt(j)){
//删除操作
break;
}
}
}
if(ransomNote.length() == null){
return true;
}else return false;
}
}
2.pass
换一种思路:
- 统计ransomNote和magazine中每个字母出现的次数,在相同字母的情况下,如果ransomNote中出现的次数大于magazine中出现的次数,则不成立。
- 当ransomNote出现的字母大于magazine时,也不成立。
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if(ransomNote.length()>magazine.length()) return false;
boolean flag=true;
int[] num = new int[26];
//遍历统计magazine中每个字母出现的次数
for(int i=0;i<magazine.length();i++){
num[magazine.charAt(i)-'a']++;
}
for(int j=0;j<ransomNote.length();j++){
num[ransomNote.charAt(j)-'a']--;
if(num[ransomNote.charAt(j)-'a']<0){
flag= false;
}
}
return flag;
}
}