力扣:赎金信java

力扣:赎金信

在这里插入图片描述
使用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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值