题解 | 密码验证合格程序
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <array>
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int mp[128][128][128];
bool solve(string& s) {
int n = s.size();
memset(mp, 0, sizeof mp);
if (n < 8)
return false;
int upper = 0, lower = 0, num = 0, special = 0;
for (int i = 0; i < n; ++i) {
if (s[i] >= 48 && s[i] <= 57)
num = 1;
else if (s[i] >= 65 && s[i] <= 90)
upper = 1;
else if (s[i] >= 97 && s[i] <= 122)
lower = 1;
else
special = 1;
}
if(num+upper+lower+special<3)
return false;
for (int i = 1; i < n-1; ++i) {
if(mp[s[i-1]][s[i]][s[i+1]]){
if(i-mp[s[i-1]][s[i]][s[i+1]]>=3)
return false;
}
else{
mp[s[i-1]][s[i]][s[i+1]]=i;
}
}
return true;
}
int main() {
string s;
while (cin >> s) {
if (solve(s))
cout << "OK" << endl;
else
cout << "NG" << endl;
}
}
// 64 位输出请用 printf("%lld")
查看1道真题和解析