题解 | #密码验证合格程序#c++

密码验证合格程序

http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

#include <iostream>
#include <string>
#include <vector>

using namespace std;
// bool isDuplicate(string s){
//     for(int i=0;i<s.size()-1;i++){
//         if()
//     }
// }

bool isValid3(string s) {

    string tmp;


    // 先尝试找到符合条件的子字符串
    int length = 3;
    int start = 0;
    while (length <= int(s.size() / 2)) {
        

        // 找到符合当前长度的子字符串
       
        while ((int(tmp.size()) < length)  && ((start+length) < s.size())) {

            tmp.push_back(s[start + tmp.size()]);

            //  有相同的,不符合要去
            if (tmp.rfind(s[start + tmp.size() - 1]) != (tmp.size() - 1)) {
                tmp.clear();
                start ++;
            }
        }
        
        if(tmp.size()==0) continue;

        // 开始比较, 如果找到
        if (s.find(tmp, start + length)!=string::npos) {
            return false;
        }
        start++;
        tmp.clear();
        
        if ((start+length) >= (s.size()-length)){
            length++;
            start = 0;
            continue;
        }
        
 

    }
    
    return true;
}

int main(void) {

    string s;
    vector<bool> isCounted(4,false);
    int count = 0;

    while (cin >> s) {
        if (s.size() <= 8) {
            cout << "NG" << endl;
            continue;
        }
        
        for (int i = 0; i < s.size(); i++) {

            // 包含大写字母
            if (s[i] >= 'A' && s[i] <= 'Z') {
                if(isCounted[0]) continue;
                count++;
                isCounted[0]=true;
                continue;
            }

            // 包含小写字母
            if (s[i] >= 'a' && s[i] <= 'z') {
                if(isCounted[1]) continue;
                count++;
                isCounted[1]=true;
                continue;
            }

            if (s[i] >= '0' && s[i] <= '9' ) {
                if(isCounted[2]) continue;
                count++;
                isCounted[2]=true;
                continue;
            }
            
            if(!isCounted[3]){
                count++;
                isCounted[3]=true;
            }
        }

       
        if (count < 3) {
            cout << "NG" << endl;
            continue;
        }
        count = 0;
        isCounted[0]=isCounted[1]=isCounted[2]=isCounted[3]=false;;

        if (!isValid3(s)) {
            cout << "NG" << endl;
            continue;
        }

        cout << "OK" << endl;


    }



    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-23 16:31
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务