Design Authentication Manager
设计一个验证器, 要有添加, 更新和查看有多少未过期token的功能.
这题直接做吧…优化就是加了个删除过期token的…
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);
*/