力扣1797

用一个map 保存验证码和过期时间,调用 generate时,将验证码-过期时间对直接插入 map中, 调用renew 时,判断验证码存在并且未过期,更新过期时间, 调用countUnexpiredTokens 时,遍历整个map,统计未过期的验证码的数量

<?php

class AuthenticationManager
{
	public $timeToLive;
	public $map = [];
	
	/**
	 * @param  Integer  $timeToLive
	 */
	function __construct($timeToLive)
	{
		$this->timeToLive = $timeToLive;
		$this->map = [];
	}
	
	/**
	 * @param  String   $tokenId
	 * @param  Integer  $currentTime
	 * @return NULL
	 */
	function generate($tokenId, $currentTime)
	{
		$this->map[$tokenId] = $currentTime + $this->timeToLive;
	}
	
	/**
	 * @param  String   $tokenId
	 * @param  Integer  $currentTime
	 * @return NULL
	 */
	function renew($tokenId, $currentTime)
	{
		if (isset($this->map[$tokenId]) && $this->map[$tokenId] > $currentTime) {
			$this->generate($tokenId, $currentTime);
		}
	}
	
	/**
	 * @param  Integer  $currentTime
	 * @return Integer
	 */
	function countUnexpiredTokens($currentTime)
	{
		$num = 0;
		foreach ($this->map as $tokenId => $time) {
			if ($time > $currentTime) {
				$num++;
			}
		}
		return $num;
	}
}
$obj = new AuthenticationManager(5);
$obj->generate('aaa', 5);
$obj->generate('bbb', 5);
$obj->renew('aaa', 7);
var_dump($obj->countUnexpiredTokens(20));

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值