力扣:赎金信
使用HashMap的java流程:
1.定义一个map类型;
2.循环遍历magazine这个字符串,提取出char,将其放入map中,key存字符,value存出现次数。
3.再循环遍历ransomNote这个字符串,判断其存在于map中,就将其次数(value)减一,存在而且当value为0时,则返回false;不存在也返回false;
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character,Integer> map1 = new HashMap<>();
for(char i:magazine.toCharArray()){//遍历magazine数组
if(map1.containsKey(i)){//判断是否存在于map中
map1.put(i,map1.get(i)+1);//存在则该map的value值+1
}else{
map1.put(i,1);//不存在则该map加入一个key为i,value为1
}
}
for(char i:ransomNote.toCharArray()){//遍历ransomNote数组
if(!map1.containsKey(i)){//判断是否存在于map1中
return false;//不存在则返回false
}else if(map1.get(i)==0){//存在但value为0,也返回false
return false;
}else{
map1.put(i,map1.get(i)-1);//存在且value不为0,将为i的map的value减一
}
}
return true;
}
}
还有一种在判断value被减为0是,将该值的map删掉
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character,Integer> map1 = new HashMap<>();
for(char i:magazine.toCharArray()){
if(map1.containsKey(i)){
map1.put(i,map1.get(i)+1);
}else{
map1.put(i,1);
}
}
for(char i:ransomNote.toCharArray()){
if(!map1.containsKey(i)){
return false;//不存在返回false
}else{
map1.put(i,map1.get(i)-1);//存在则对其value值减一(此时的value一定大于的)
if(map1.get(i)==0){//对减一后的value判断是否为0,为0则删除该map
map1.remove(i);
}
}
}
return true;
}
}
使用数组的方法
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] re = new int[26];//定义一个长度为26的数组
for(char i: magazine.toCharArray()){//遍历magazine字符串
int temp = i - 'a';//将26个字母存入对应的下表中,每出现一次就++
re[temp]++;
}
for(char i:ransomNote.toCharArray()){//遍历ransomNote字符串
int temp = i-'a';//计算出当前的字母存储在数组的下标
if(re[temp] > 0){//如果下标大于0就减1,否则返回失败
re[temp]--;
}else{
return false;
}
}
return true;
}
}