按照密码的要求,依次遍历验证即可。

1、首先验证长度是否大于8,不满足直接输出NG并继续

2、统计字符种类,验证是否包含三种以上的字符

3、不能有长度大于2的不含公共元素的子串重复 即 有>=3的重复子串 就NG,如021Abcd9Abcd1中的Abc。实现方式:判断

[i+3,str.length)中是否含[i,i+3) 的字符串; i逐个往后移动

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);

        while (sc.hasNextLine()) {
            String s = sc.nextLine();
            //条件1:长度超过8位
            if (s.length() <= 8) {
                System.out.println("NG");
                continue; // 即 不执行 本次循环 接下来内容
            }

            //条件2.包括大小写字母.数字.其它符号,以上四种至少三种
            int count[] = new int[4];//记录出现 类别个数
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
                    count[0] = 1;
                } else if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
                    count[1] = 1;
                } else if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                    count[2] = 1;
                } else {
                    count[3] = 1;
                }
            }
            if (count[0] + count[1] + count[2] + count[3] < 3) {
                System.out.println("NG");
                continue;
            }


            //3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行)   即 有>=3的重复子串 就NG,如021Abcd9Abcd1中的Abc
            if (judgeRepeat(s)) {
                System.out.println("NG");
                continue;
            } else {
                System.out.println("OK");
            }
        }
    }

    //检测是否存在长度大于3的重复子串
    private static boolean judgeRepeat(String s) {
        for (int i = 0; i + 3 < s.length(); i++) {
            if (s.substring(i + 3).contains(s.substring(i, i + 3))) {  // 即 判断 [r,str.length)中是否含[l,r) 的字符串; l逐个往后移动
                return true;
            }
        }
        return false;
    }


    static boolean getString(String str, int l, int r) {
        if (r >= str.length()) {
            return false;
        }
        if (str.substring(r).contains(str.substring(l, r))) { // 即 判断 [r,str.length)中是否含[l,r) 的字符串; l逐个往后移动
            return true;
        } else {
            return getString(str, l + 1, r + 1);
        }
    }
}