Java写题解的第1天 | #密码验证合格程序#

密码验证合格程序

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

密码验证合格程序

条件一: 长度大于8 -- 直接调用字符串长度的方法验证;
条件二: 必须包含大小写数字和其它字符中的至少三种 -- 新建一个长度为4的数组进行存储, 如果有字符符合条件就将对应位置的元素设置为1, 求和即使种类数;
条件三: 不能有重复的长度至少为3的字串 -- 依次检查

验证条件三的算法复杂度为O(nlogn) 可能不是最优解

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = "";
        while ((s = br.readLine()) != null) {
            if (verify(s)) {
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
        }
        br.close();
    }

    public static boolean verify(String s) {
        // 检查密码长度
        if (s.length() <= 8) {
            return false;
        } 

        // 检查密码字符种类
        char[] cs = s.toCharArray();
        int[] checkChar = new int[4];
        for (char c: cs) {
            if ('a' <= c && c <= 'z') {
                checkChar[0] = 1;
            } else if ('A' <= c && c <= 'Z') {
                checkChar[1] = 1;
            } else if ('0' <= c && c <= '9') {
                checkChar[2] = 1;
            } else {
                checkChar[3] = 1;
            }
        }
        int coun = 0;
        for(int n: checkChar) {
            coun += n;
        }
        if (coun < 3) {
            return false;
        }

        // 检查重复子串
        int slow = 0, fast = 0;
        while (slow < cs.length - 5) {
            fast = slow + 3;
            while (fast < cs.length - 2 && cs[fast] != cs[slow]) {
                fast++;
            }
            if (fast != cs.length - 2) {
                boolean check2 = cs[slow+1] == cs[fast+1];
                boolean check3 = cs[slow+2] == cs[fast+2];
                if (check2 && check3) {
                    return false;
                }
            }
            slow++;
        }

        return true;
    }    
}
全部评论
021abcAaAabc 应该过不了吧?
点赞 回复 分享
发布于 2024-05-11 14:58 江苏

相关推荐

10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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