May LeetCoding Challenge3 之 HashMap的使用

Map是一种key-value映射表。不存在重复的key。

经常用的方法有put(key,value),get(key),containsKey(key),可以通过for each遍历keyset(),entryset()。

给map赋值的方法可以参考该语句:map.put(c, map.getOrDefault(c, 0)+1);

本题提供两种解法:

1.好理解的方法。遍历ransomNote的字符,找出字符在magazine的下标位置,如果下标为-1(即magazine不存在该字符),返回false;否则删除magazine中该字符。

2.用HashMap存储字符和字符出现的次数。先将magazine存入map,然后再遍历ransomNote,减去字符出现的次数。如果次数小于0,返回false。

JAVA

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        for(char c: ransomNote.toCharArray()){
            int index = magazine.indexOf(c);
            if(index == -1) return false;
            magazine = magazine.substring(0, index) + magazine.substring(index+1);
        }
        return true;
    }
}
class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        Map<Character, Integer> map = new HashMap<>();
        for(char c: magazine.toCharArray()){
            map.put(c, map.getOrDefault(c, 0)+1);
        }
        for(char c: ransomNote.toCharArray()){
            map.put(c, map.getOrDefault(c, 0)-1);
            if(map.get(c) < 0) return false;
        }
        return true;
    }
}

Python3

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        for c in ransomNote:
            if c not in magazine:
                return False
            index = magazine.index(c)
            magazine = magazine[0:index] + magazine[index+1:]
        return True
class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        d = dict()
        for c in magazine:
            if c in d:
                d[c] += 1
            else:
                d[c] = 1
        for c in ransomNote:
            if c in d:
                d[c] -= 1
            else:
                d[c] = -1
            if d[c] < 0:
                return False
        return True
原文地址:https://www.cnblogs.com/yawenw/p/12827736.html