Design Authentication Manager
设计一个验证器, 要有添加, 更新和查看有多少未过期token的功能.
这题直接做吧…优化就是加了个删除过期token的…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
class AuthenticationManager { Map<String, Integer> m = new HashMap<>(); int ttl; public AuthenticationManager(int timeToLive) { ttl = timeToLive; } public void generate(String tokenId, int currentTime) { m.put(tokenId, currentTime + ttl); } public void renew(String tokenId, int currentTime) { if(!m.containsKey(tokenId) || m.get(tokenId) <= currentTime) return; m.remove(tokenId); generate(tokenId, currentTime); } public int countUnexpiredTokens(int currentTime) { int res = 0; Set<String> set = new HashSet<>(); for(Map.Entry<String, Integer> e : m.entrySet()){ if(e.getValue() > currentTime){ res++; }else{ set.add(e.getKey()); } } for(String s : set){ m.remove(s); //remove all expired token } return res; } } /** * Your AuthenticationManager object will be instantiated and called as such: * AuthenticationManager obj = new AuthenticationManager(timeToLive); * obj.generate(tokenId,currentTime); * obj.renew(tokenId,currentTime); * int param_3 = obj.countUnexpiredTokens(currentTime); */ |