1、哈希表
我们在设计类的时候,可以使用哈希表来储存tokenId和过期时间的对应关系。考虑到验证码的生存时间设置相同,因此我们可以将生存时间加入到类中。
因此,我们在构造函数中根据参数设置每个验证码的生存时间。在generate函数中,我们根据验证码的tokenId和currentTime来确定当前验证码的到期时间。在renew函数中,我们根据哈希表中存储的tokenId对应的到期时间来确定是否超出当前时间currentTime。在countUnexpiredTokens函数中,我们只需要遍历整个哈希表,判断每一项的到期时间是否超出当前时间currentTime即可。
class AuthenticationManager {
private:
int timeToLive = 0;
unordered_map<string, int> hs;
public:
AuthenticationManager(int timeToLive) {
this->timeToLive = timeToLive;
}
void generate(string tokenId, int currentTime) {
hs[tokenId] = currentTime + timeToLive;
}
void renew(string tokenId, int currentTime) {
if (hs.count(tokenId) && hs[tokenId] > currentTime) {
hs[tokenId] = currentTime + timeToLive;
}
}
int countUnexpiredTokens(int currentTime) {
int num = 0;
for (auto i: hs) {
if (currentTime < i.second) {
++num;
}
}
return num;
}
};