这道题难点是如何找到子串, 用递归, 只需要证明3个字符的子串有没重复即可, 因为即使4个字符子串重复, 3字符子串也会重复.

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String ok = "OK";
        String ng = "NG";

        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            if (a.length() <= 8) {
                System.out.println(ng);
                continue;
            }

            int[] bingo = new int[] {0, 0, 0, 0};
            for (int i = 0; i < a.length(); i++) {
                char c = a.charAt(i);
                if (c == ' ' || c == '\n') {
                    System.out.println(ng);
                    continue;
                }
                if (Character.isDigit(c)) {
                    bingo[0] = 1;
                } else if (Character.isUpperCase(c)) {
                    bingo[1] = 1;
                } else if (Character.isLowerCase(c)) {
                    bingo[2] = 1;
                } else {
                    bingo[3] = 1;
                }
            }
            int c = 0;
            for (int i = 0; i < bingo.length; i++) {
                c += bingo[i];
            }
            if (c < 3) {
                System.out.println(ng);
                continue;
            }

            boolean isOk = true;

            if (!isRepeat(a, 0, 3)) {
                System.out.println(ok);
            } else {
                System.out.println(ng);
            }
        }
    }


    public static boolean isRepeat(String mStr, int start, int end) {
        //如果end大于等于length 就结束,因为没有没子串了, 还没找到重复证明就没重复,直接return false
        if (end >= mStr.length()) {
            //没有重复
            return false;
        }

        // end 后面的子串,如果包含前面这段子串,则表示重复了 ,
        if (mStr.substring(end).contains(mStr.substring(start, end))) {
            return true;
        }
        //继续递归找下一串, 下标start与end 各右移一位
        return isRepeat(mStr, start + 1, end + 1);
    }
}