[Java] 5694. Concevez un système de vérification --- utilisez la valeur-clé pour résoudre la relation entre deux variables! ! !

Vous devez concevoir un système de vérification comprenant des codes de vérification. Lors de chaque vérification, l'utilisateur recevra un nouveau code de vérification, qui expire timeToLive secondes après le currentTime. Si le code de vérification est mis à jour, il prolongera timeToLive secondes à l'heure actuelle (peut être différente de l'heure actuelle précédente).

Veuillez implémenter la classe AuthenticationManager:

AuthenticationManager (int timeToLive) Construit AuthenticationManager et définit le paramètre timeToLive.
generate (string tokenId, int currentTime) Étant donné le tokenId, génère un nouveau code de vérification à l'heure actuelle currentTime.
renouveler (string tokenId, int currentTime) Mettez à jour le code de vérification avec le tokenId donné et n'a pas expiré à currentTime. Si le code de vérification correspondant au tokenId donné n'existe pas ou a expiré, veuillez ignorer cette opération et aucune opération de mise à jour ne se produira.
countUnexpiredTokens (int currentTime) Veuillez renvoyer le nombre de codes de vérification qui n'ont pas expiré à l'heure actuelle donnée.
Si un code de vérification expire à l'instant t et qu'une autre opération se produit à l'instant t (opération renew ou countUnexpiredTokens), l'événement d'expiration est prioritaire sur les autres opérations.

Exemple 1:
Insérez la description de l'image ici

Entrée:
["AuthenticationManager", "renouveler", "générer", "countUnexpiredTokens", "générer", "renouveler", "renouveler", "countUnexpiredTokens"]
[[5], ["aaa", 1], [" aaa ", 2], [6], [" bbb ", 7], [" aaa ", 8], [" bbb ", 10], [15]]
Sortie:
[null, null, null, 1, null , nul, nul, 0]

Explication:
AuthenticationManager authenticationManager = new AuthenticationManager (5); // Construisez AuthenticationManager et définissez timeToLive = 5 secondes.
authenticationManager.renew ("aaa", 1); // Au temps 1, le tokenId sans code de vérification est "aaa" et aucun code de vérification n'est mis à jour.
authenticationManager.generate ("aaa", 2); // Au temps 2, un nouveau code de vérification avec tokenId "aaa" est généré.
authenticationManager.countUnexpiredTokens (6); // Au temps 6, seul le code de vérification dont le tokenId est "aaa" n'a pas expiré, donc 1 est renvoyé.
authenticationManager.generate ("bbb", 7); // Au temps 7, un nouveau code de vérification avec tokenId "bbb" est généré.
authenticationManager.renew ("aaa", 8); // Le code de vérification dont le tokenId est "aaa" expire au temps 7, et 8> = 7, donc l'opération de renouvellement au temps 8 est ignorée et aucun code de vérification n'est mis à jour.
authenticationManager.renew ("bbb", 10); // Le code de vérification dont le tokenId est "bbb" n'expire pas au temps 10, donc l'opération de renouvellement sera exécutée et le jeton expirera au temps 15.
authenticationManager.countUnexpiredTokens (15); // Le code de vérification avec tokenId "bbb" expire au temps 15, et le code de vérification avec tokenId "aaa" expire au temps 7. Tous les codes de vérification ont expiré, donc 0 est renvoyé.

rapide:

1 <= timeToLive <= 108
1 <= currentTime <= 108
1 <= tokenId.length <= 5 tokenId
contient uniquement des lettres minuscules anglaises.
Tous les appels à la fonction generate contiendront une valeur tokenId unique.
Dans tous les appels de fonction, la valeur de currentTime est strictement incrémentée.
Le nombre total d'appels de toutes les fonctions ne dépasse pas 2000 fois.

代码:
private int timeToLive;
	private HashMap<String,Integer> hashMap=new HashMap<>();
	public AuthenticationManager(int timeToLive) {
    
    
        this.timeToLive=timeToLive;
    }
    
    public void generate(String tokenId, int currentTime) {
    
    
        this.hashMap.put(tokenId,currentTime+this.timeToLive);
    }
    
    public void renew(String tokenId, int currentTime) {
    
    
    	
        if(this.hashMap.containsKey(tokenId)&&this.hashMap.get(tokenId)>currentTime) {
    
    
        	 this.hashMap.put(tokenId,currentTime+this.timeToLive);
        }else {
    
    
        	this.hashMap.remove(tokenId);
        }
    }
    
    public int countUnexpiredTokens(int currentTime) {
    
    
    	int i=0;
		for (Map.Entry<String,Integer> a: this.hashMap.entrySet()) {
    
    
			 if(a.getValue()>currentTime) {
    
    
				 i++;
			 }
		}
    	return i;
    }

Je suppose que tu aimes

Origine blog.csdn.net/qq_44461217/article/details/115040540
conseillé
Classement