哈希查重,只判断找长度为3的重复字串即可 #include <bits/stdc++.h> using namespace std; int main() { string s; while(getline(cin,s)) { bool st[10]={0}; if(s.size()>8)st[5]=true; else { cout<<"NG"<<endl; continue; } for(int i=0;i<s.size();i++) { if(s[i]>='0'&&s[i]<='9')st[1]=true; else if(s[i]>='a'&&s[i]<='z')st[2]=true; else if(s[i]>='A'&&s[i]<='Z')st[3]=true; else if(s[i]!='\n'&&s[i]!=' ')st[4]=true; } int len=3; unordered_map<string,int>mp; for(int l=0;l+len-1<s.size();l++) { if(!mp[s.substr(l,len)])mp[s.substr(l,len)]++; else { st[6]=true; break; } } int ok=0; for(int i=1;i<=4;i++) if(st[i]) ok++; if(ok>=3&&!st[6])cout<<"OK"<<endl; else puts("NG"); } }