题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <iostream>
#include <string>
#include <unordered_set>
const std::string OK = "OK";
const std::string NG = "NG";
bool check1(const std::string& s) {
return s.length() > 8;
}
bool check2(const std::string& s) {
int type[4] = {0, 0, 0, 0};
for (auto& i : s) {
if (i == ' ' || i == '\n') {
return false;
}
if (i >= 'A' && i <= 'Z') {
type[0] = 1;
} else if (i >= 'a' && i <= 'z') {
type[1] = 1;
} else if (i >= '0' && i <= '9') {
type[2] = 1;
} else {
type[3] = 1;
}
}
if (type[0] + type[1] + type[2] + type[3] < 3) {
return false;
}
return true;
}
bool check3(const std::string& s) {
std::unordered_set<std::string> sets;
std::string tmp;
for (int i = 0; i < s.length() - 2; ++i) {
tmp = s.substr(i, 3);
if (sets.find(tmp) == sets.end()) {
sets.insert(tmp);
} else {
return false;
}
}
return true;
}
int main() {
std::string in;
while (getline(std::cin, in)) {
if (check1(in) && check2(in) && check3(in)) {
std::cout << OK << '\n';
} else {
std::cout << NG << '\n';
}
}
return 0;
}
有看到一个利用正则表达式匹配的解法
#include <regex>
记录一下

