首页 > 试题广场 >

密码验证合格程序

[编程题]密码验证合格程序
  • 热度指数:426733 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

密码要求:

1.长度超过8位

2.包括:大写字母/小写字母/数字/其它符号,以上四种至少三种

3.不能分割出两个相等的长度大于 2 的子串,例如 abcabc 可以分割出两个 abc,不合法,ababa 则无法分割出2个aba。
注:其他符号不含空格或换行

数据范围:输入的字符串长度满足

输入描述:

一组字符串。



输出描述:

如果符合要求输出:OK,否则输出NG

示例1

输入

021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
021Abc1111

输出

OK
NG
NG
OK
OK
import java.util.*;
import java.util.regex.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 循环读取输入直到没有更多的行
        while (scanner.hasNext()) {
            String input = scanner.next();
            // 检查密码长度是否大于8位
            if (input.length() <= 8) {
                System.out.println("NG");
                continue;
            }
            // 检查密码是否包含至少三种不同类型的字符
            if (getMatch(input)) {
                System.out.println("NG");
                continue;
            }
            // 检查密码中是否有长度大于2的重复子串
            if (getString(input, 0, 3)) {
                System.out.println("NG");
                continue;
            }
            // 如果所有检查都通过,则输出OK
            System.out.println("OK");
        }

        // 关闭scanner对象
        scanner.close();
    }

    // 检查密码是否包含至少三种不同类型的字符
    private static boolean getMatch(String str) {
        // 初始化计数器
        int count = 0;
        // 编译正则表达式模式
        Pattern p1 = Pattern.compile("[A-Z]"); // 大写字母
        Pattern p2 = Pattern.compile("[a-z]"); // 小写字母
        Pattern p3 = Pattern.compile("[0-9]"); // 数字
        Pattern p4 = Pattern.compile("[^a-zA-Z0-9]"); // 特殊字符
        // 检查密码是否包含大写字母
        if (p1.matcher(str).find()) {
            count++;
        }
        // 检查密码是否包含小写字母
        if (p2.matcher(str).find()) {
            count++;
        }
        // 检查密码是否包含数字
        if (p3.matcher(str).find()) {
            count++;
        }
        // 检查密码是否包含特殊字符
        if (p4.matcher(str).find()) {
            count++;
        }

        // 如果密码包含至少三种不同类型的字符,则返回false(不满足NG条件)
        return count < 3;
    }

    // 检查密码中是否有长度大于2的重复子串
    private static boolean getString(String str, int l, int r) {
        // 如果右指针超出字符串长度,则返回false(没有重复子串)
        if (r >= str.length()) {
            return false;
        }
        // 检查从左指针到右指针的子串是否在右指针之后的位置出现
        if (str.substring(r).contains(str.substring(l, r))) {
            return true;
        } else {
            // 如果没有找到重复子串,则向右移动右指针并递归检查
            return getString(str, l + 1, r + 1);
        }
    }
}

发表于 2024-10-18 16:22:56 回复(0)
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String passwd = new String();
        while (sc.hasNext()) {
            passwd = sc.nextLine();
            //第一步,判断密码长度,密码少于等于8位直接输出NG重新循环
            if (passwd.length() <= 8) {
                System.out.println("NG");
                continue;
            }
            //第二步判断复杂度
            if (!regCheck(passwd)) {
                System.out.println("NG");
                continue;
            }
            //第三步无连续重复字符串判断,包括0个但不包括3个
            if(!dupCheck(passwd,0,3)){
                System.out.println("NG");
                continue;
            }else System.out.println("OK");
        }
    }
    
    //连续重复字符串判断
    private static boolean dupCheck(String passwd, int s, int e) {
        //如果索引e已经大于等于密码长度,表明没有连续重复字符串,返回真
        if (e >= passwd.length()) {
            return true;
        }
        //如果从索引e开始的子串包含从索引s到索引e的子串,表明有重复连续字符串,返回假
        if (passwd.substring(e).contains(passwd.substring(s, e))) {
            return false;
        } else {
            //将起始索引和结束索引加1,重新进行判断
            return dupCheck(passwd,s+1,e+1);
        }
    }

    //密码复杂段判断
    private static Boolean regCheck(String passwd) {
        //分别写四个正则式,代表包含数字、小写字母、大写字母以及除了前三个以外的所有字符
        Pattern p1 = Pattern.compile("[0-9]");
        Pattern p2 = Pattern.compile("[a-z]");
        Pattern p3 = Pattern.compile("[A-Z]");
        Pattern p4 = Pattern.compile("[^a-zA-Z0-9]");
        int count = 0;
        if (p1.matcher(passwd).find()) count++;
        if (p2.matcher(passwd).find()) count++;
        if (p3.matcher(passwd).find()) count++;
        if (p4.matcher(passwd).find()) count++;
        if (count >= 3) return true;
        return false;
    }
}

发表于 2024-09-14 16:39:45 回复(0)
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.CopyOnWriteArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        List<String> str = new CopyOnWriteArrayList<>();
        while (in.hasNext()) { // 注意 while 处理多个 case
            str.add(in.nextLine());
        }

        for (String s : str) {
            
            if (s.length() <= 8 ) {
                System.out.println("NG");
                continue;
            }

            int i = 0;
            boolean flag = true ;
            while (flag && i < s.length() - 6) {
                for (int j = 3 ; j <= (s.length() - i) / 2; j++) {
                    if (kmp(s.substring(j + i), s.substring(i, j + i))) {
                        flag = false ;
                        break;
                    }
                }
                i++;
            }

            if (!flag) {
                System.out.println("NG");
                continue;
            }
            int count = 0 ;
            if (s.matches(".*[0-9].*")) {
                count ++ ;
            }
            if (s.matches(".*[a-z].*")) {
                count ++ ;
            }
            if (s.matches(".*[A-Z].*")) {
                count ++ ;
            }               
            if (s.matches(".*[\\u00A0\\s\"`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?].*")) {
                count ++ ;
            }
            if (count > 2) {
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
        }
    }

    /**
    kop算法
     */
    private static boolean kmp(String str1, String str2) {
        int[] next = new int[str2.length()];
        for (int i = 1, j = 0; i < str2.length(); i++) {
            if (str2.charAt(i) == str2.charAt(j)) {
                j++;
                next[i] = j;
            } else if (str2.charAt(i) != str2.charAt(j)) {
                j = 0;
            }
        }
        for (int i = 0 ; i <= str1.length() - str2.length() ; i++) {
            for (int j = 0 ; j < str2.length() ; j++) {
                if (str1.charAt(i) == str2.charAt(j)) {
                    i++;
                    if (j == str2.length() - 1) {
                        return true;
                    }
                } else {
                    i = i  - next[j];
                    break;
                }
            }
        }
        return false;
    }
}

发表于 2024-09-06 00:53:32 回复(0)
import java.util.*;

class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            String s = in.next();
            if(isChar(s) >=3 && s.length()>8){
                if(islength(s)){
                    System.out.println("OK");
                }else{
                    System.out.println("NG");
                }
            }
            else{
                System.out.println("NG");
            }
        }
   

    }
   
    public static int isChar(String s){
        int count  = 0 ;
        if(s.matches(".*[A-Z].*")){
            count++;
        }
        if(s.matches(".*[a-z].*")){
            count++;
        }
        if(s.matches(".*[0-9].*")){
            count++;
        }
        if(s.matches(".*\\W+.*") && !s.contains(" ") && !s.contains("\n")){
            count++;
        }
        return count;
    }
    public static boolean islength(String str) {
        if(str.matches(".*(.{3,}).*\\1.*")){
            return false;
        }
        return true;
    }
}
发表于 2024-08-31 01:02:04 回复(0)
import java.util.Scanner;

import java.util.regex.*;

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

            //检查位数
            String pwd = in.nextLine();
            if (pwd == null || pwd.length() <= 8) {
                System.out.println("NG");
                return;
            }

            //检测格式
            String[] patterns = new String[] {
                "\\d+", "[a-z]+", "[A-Z]+", "[^\\sA-za-z0-9]+"
            };

            int okCount = 0;

            for (int i = 0; i < patterns.length; i++) {
            Pattern pattern = Pattern.compile(patterns[i]);
            if (pattern.matcher(pwd).find()) {
                // System.out.println(patterns[i] + "通过");
                okCount += 1;
            }
        }
            if (okCount < 3) {
                System.out.println("NG");
                return;
            }

            //检查重复子串
            boolean noReplace = true;
            for (int i = 0; i < pwd.length() - 3; i++) {
                String s = pwd.substring(i, i + 3);
                int checkIndex = i + 1;
                while(checkIndex< pwd.length() - 3){
                    if(pwd.indexOf(s,checkIndex)!=-1){
                        noReplace = false;
                        break;
                    }
                    checkIndex++;
                }
            }

            System.out.println(noReplace?"OK":"NG");
        }
    }
}


发表于 2024-08-04 17:11:44 回复(0)
import java.util.Scanner;

public class PasswordVerify {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String password = scanner.nextLine();
            isValid(password);
        }
    }

    private static void isValid(String password) {

        if (password.length() < 8) {
            System.out.print("NG");
            return;
        }

        char[] letter = password.toCharArray();
        int upperCaseLetter = 0;
        int lowercaseLetter = 0;
        int number = 0;
        int other = 0;
        for (char c : letter) {
            if (c >= 'a' && c <= 'z') {
                lowercaseLetter = 1;
            } else if (c >= 'A' && c <= 'Z') {
                upperCaseLetter = 1;
            } else if (c >= '0' && c <= '9') {
                number = 1;
            } else {
                other = 1;
            }
        }
        if (upperCaseLetter + lowercaseLetter + number + other < 3) {
            System.out.println("NG");
        } else {
            boolean isValid = true;
            for (int i = 0; i < letter.length - 3; i++) {
                for (int j = i + 1; j <= letter.length - 3; j++) {
                    if (letter[i] == letter[j] && letter[i + 1] == letter[j + 1] && letter[i + 2] == letter[j + 2]) {
                        isValid = false;
                        break;
                    }
                }
            }
            if (isValid) {
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }

        }

    }
}

发表于 2024-07-13 23:33:56 回复(0)
import java.util.HashSet;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String input = in.nextLine();

            if(input.length()<=8) {
                System.out.println("NG");
                continue;
            }

            boolean[] condition = new boolean[4];
            for (int i=0; i<input.length(); i++) {
                char c = input.charAt(i);
                if (c>='a' && c<='z') {
                    condition[0] = true;
                    continue;
                }
                if (c>='A' && c<='Z') {
                    condition[1] = true;
                    continue;
                }  
                if (c>='0' && c<='9') {
                    condition[2] = true;
                    continue;
                }  
                if (c!=' ' && c!='\t') {
                    condition[3] = true;
                    continue;
                }  
            }
            int count = 0;
            for (boolean tmp:condition) {
                if (tmp) ++count;
            }
            if (count < 3) {
                System.out.println("NG");
                continue;
            }

            boolean isNG = false;
            for (int j=0; j<input.length()-3; j++) {
                String sub = input.substring(j,j+3);
                String remain = input.substring(j+3);
                if (remain!=null && remain.contains(sub)) {
                    isNG = true;
                    break;
                }
            }
            if (isNG) {
                System.out.println("NG");
                continue;
            }

            System.out.println("OK");
        }
    }
}

发表于 2024-06-18 17:59:55 回复(0)
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()) {
            check(sc.nextLine());
        }
    }

    private static void check(String password) {
        if (password.length() <= 8) {
            System.out.println("NG");
            return;
        }
        int type = 0;
        boolean low = false;
        boolean up = false;
        boolean dig = false;
        boolean ch = false;
        for (int i = 0; i < password.length(); i++) {
            char c = password.charAt(i);
            if (c >= 'a' && c <= 'z') {
                low = true;
            } else if (c >= 'A' && c <= 'Z') {
                up = true;
            } else if (c >= '0' && c <= '9') {
                dig = true;
            } else {
                ch = true;
            }
        }
        if (low) {
            type++;
        }
        if (up) {
            type++;
        }
        if (dig) {
            type++;
        }
        if (ch) {
            type++;
        }
        if (type < 3) {
            System.out.println("NG");
            return;
        }
        for (int i = 0; i < password.length() - 3; i++) {
            String str = password.substring(i, i + 3);
            if (password.indexOf(str, i + 3) != -1) {
                System.out.println("NG");
                return;
            }
        }
        System.out.println("OK");
        return;
    }
}
编辑于 2024-04-16 22:29:03 回复(0)
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args)throws Exception {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line=null;
        while((line=br.readLine())!=null){
            check(line);
        }
    }

    private static boolean check(String str) {
        // 长度超过8位
        if (str.length() < 8) {
            System.out.println("NG");
            return false;
        }

        // 包括至少3种
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
                count |= 1 << 0;
            } else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {
                count |= 1 << 1;
            } else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                count |= 1 << 2;
            } else {
                count |= 1 << 3;
            }
        }
        if (Integer.bitCount(count) < 3) {
            System.out.println("NG");
            return false;
        }


        // 不能有长度大于2的包含公共元素的子串重复,子串长度至少3
        for (int i = 0; i < str.length() - 3; i++) {
            String sub = str.substring(i, i + 3);
            if (str.indexOf(sub, i + 3) != -1) {
                System.out.println("NG");
                return false;
            }
        }

        System.out.println("OK");
        return true;
    }
}

编辑于 2024-04-11 13:30:28 回复(0)
编辑于 2024-03-28 13:05:31 回复(0)
正则表达式求解
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            int j = 0;
            String str = in.nextLine();
            if(str.length() < 8){           //长度不符合要求
                System.out.println("NG");
                continue;
            }
            if(str.matches(".*[ ].*")){     //含有空格
                System.out.println("NG");
                continue;
            }
            if(str.matches(".*[A-Z].*")){   //含有大写字母
                j++;
            }
            if(str.matches(".*[a-z].*")){   //含有小写字母
                j++;
            }
            if(str.matches(".*[^A-Za-z0-9].*")){    //含有其他字符
                j++;
            }
            if(str.matches(".*[0-9].*")){   //含有数字
                j++;
            }
            if(j>=3 && !judgeString(str)){  //j>=3且不含有重复子串
                System.out.println("OK");
            }else{      //j<=3或者含有重复子串
                System.out.println("NG");
            }
        }
       
    }

     public static boolean judgeString(String str){
        for(int i = 1; i < str.length()-2; i++){
            if(str.substring(i).contains(str.substring(i-1,i+2))){
                return true;
            }
        }
        return false;
     }
}
编辑于 2024-03-11 00:55:20 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            if (str.length() < 8 || check(str)) {
                System.out.println("NG");
                continue;
            }
            int daxieCount = 0;
            int xiaoxieCount = 0;
            int zimuCount = 0;
            int teshuCount = 0;
            for(int i = 0;i<str.length();i++){
                char c = str.charAt(i);
                if (Character.isUpperCase(c)) {
                    daxieCount = 1;
                } else if (Character.isLowerCase(c)) {
                    xiaoxieCount= 1;
                } else if (Character.isDigit(c)) {
                    zimuCount= 1;
                } else {
                    teshuCount= 1;
                }
            }
            if(daxieCount+xiaoxieCount+zimuCount+teshuCount >= 3){
                System.out.println("OK");
            }else{
                System.out.println("NG");
            }
        }
    }

    public static boolean check(String str) {
        for (int i = 0; i < str.length()/2+1; i++) {
            String substring = str.substring(i, i + 3);
            if(str.substring(i+3).contains(substring)){
                return true;
            }
        }
        return false;
    }
}
发表于 2024-02-02 13:04:28 回复(1)
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) {
            String text = in.nextLine();
            System.out.println(text.matches(("^(?![a-zA-Z]+$)" +
                    "(?![a-z\\d]+$)" +
                    "(?![a-z[^A-Za-z0-9]]+$)" +
                    "(?![\\d[^A-Za-z0-9]]+$)" +
                    "(?![\\dA-Z]+$)" +
                    "(?![[^A-Za-z0-9]A-Z]+$)" +
                    "[A-Za-z\\d[^A-Za-z0-9]]{8,}$"))&&text.matches("^(?!.*(.{3,}).*\\1).*$") ? "OK" : "NG");
        }
    }

发表于 2023-11-03 09:30:43 回复(1)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            int res = 0;
            if (str.contains(" ") || str.length() <= 8 || !check(str)) {
                System.out.println("NG");
                continue;
            }
            if(!crl("[a-z]",str)) res++;
            if(!crl("[A-Z]",str)) res++;
            if(!crl("[0-9]",str)) res++;
            if(!crl("[^a-zA-Z0-9]",str)) res++;
            if (res >= 3) {
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
        }
    }
    public static boolean crl(String str, String s) {
        return s.length() == s.replaceAll(str,"").length();
    }

    public static boolean check(String str) {
        for (int i = 0; i < str.length(); i ++) {
            for (int j = i + 3; j < str.length() - 3; j++) {
                if (str.substring(i, i + 3).contains(str.substring(j, j + 3))) {
                    return false;
                }
            }
        }
        return true;
    }
}

发表于 2023-10-16 23:20:53 回复(1)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while ((in.hasNextLine())){
            String str=in.nextLine();
            int flag=0;
            if(str.length()>8){
                int arr[]=new int[4];
                arr[0]=0;arr[1]=0;arr[2]=0;arr[3]=0;
                for(int i=0;i<str.length();i++){
                    if(str.charAt(i)>='a'&&str.charAt(i)<='z'){
                        arr[0]=arr[0]+1;
                    }else if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
                        arr[1]=arr[1]+1;
                    }else if(str.charAt(i)>='0'&&str.charAt(i)<='9') {
                        arr[2]=arr[2]+1;
                    }else if(str.charAt(i)!=' '){
                        arr[3]=arr[3]+1;
                    }
                }
                int count=0;
                for(int i=0;i<=3;i++){
                    if(arr[i]>0){
                        count++;
                    }
                }
                if(count>=3){
                    for(int i=0;i<str.length()-5;i++){
                        for(int j=i+3;j<str.length()-2;j++){
                            if(str.charAt(i)==str.charAt(j)&&
                                    str.charAt(i+1)==str.charAt(j+1)&&
                                    str.charAt(i+2)==str.charAt(j+2)){
                                flag++;
                                break;
                            }
                        }
                    }
                }else{
                    flag++;
                }
            }else{
                flag++;
            }
            if(flag==0){
                System.out.println("OK");
            }else {
                System.out.println("NG");
            }
        }
    }
}

发表于 2023-09-15 19:25:43 回复(0)
import java.util.*;
import java.util.regex.Pattern;
//用find 匹配单个元素,用set去重看是否有重复子串
public class Main {
   
   public String isValid(String str){
        if (str.length()<=8){return "NG"; }

        Pattern lowPattern = Pattern.compile("[a-z]");
        Pattern upPattern = Pattern.compile("[A-Z]");
        Pattern numPattern = Pattern.compile("\\d");
        Pattern otherPattern = Pattern.compile("[^a-zA-z0-9\\t\\n]");

        int cnt=0;
        if (lowPattern.matcher(str).find()){cnt+=1;}
        if (upPattern.matcher(str).find()){cnt+=1;}
        if (numPattern.matcher(str).find()){cnt+=1;}
        if (otherPattern.matcher(str).find()){cnt+=1;}

        if (cnt<3){return "NG";}

        HashSet<String> set = new HashSet<>();
        for (int i = 0; i < str.length()-2; i++) {
            String newStr = str.substring(i, i + 3);
            set.add(newStr);
        }

        if (set.size()<str.length()-2){return "NG";}

        return "OK";
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
        String str=in.nextLine();
        System.out.println(new Main().isValid(str));
        }
    }

}

发表于 2023-09-15 00:34:19 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();

            if(a.length()<=8){
                System.out.println("NG");
                continue;
            }

            int count=0;
            if(a.matches(".*[a-z].*")){
                count++;
            }

             if(a.matches(".*[A-Z].*")){
                count++;
            }

             if(a.matches(".*[0-9].*")){
                count++;
            }

            if(a.matches(".*[^a-zA-Z0-9].*")){
                count++;
            }

            if(count<3){
                System.out.println("NG");
                continue;
            }

            boolean dul=false;
            for(int i=0;i<a.length()-4;i++){
                String left=a.substring(i+3);
                String cur=a.substring(i,i+3);

                if(left.contains(cur)&&!cur.isEmpty()){
                    dul=true;
                     break;
                }
            }


            if(dul){
                   System.out.println("NG");
            }else{
                    System.out.println("OK");
            }
           
        }
    }
}

发表于 2023-08-07 22:31:46 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String input = in.nextLine();
            System.out.println(ifOK(input));
        }
       
    }

    //
    public static String ifOK(String input) {
        String result = new String();
        int charTypeNum = 0;

        //密码长度
        if (input.length() < 9) {
            result = "NG";
            return result;
        }

        //符号种类
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') {
                charTypeNum++;
                break;
            }
        }
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) >= 'a' && input.charAt(i) <= 'z') {
                charTypeNum++;
                break;
            }
        }
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) >= '0' && input.charAt(i) <= '9') {
                charTypeNum++;
                break;
            }
        }
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') {
                continue;
            }
            if (input.charAt(i) >= 'a' && input.charAt(i) <= 'z') {
                continue;
            }
            if (input.charAt(i) >= '0' && input.charAt(i) <= '9') {
                continue;
            }
            if (input.charAt(i) == ' ' || input.charAt(i) == '\n') {
                continue;
            }
            charTypeNum++;
            break;
        }
        if (charTypeNum < 3) {
            result = "NG";
            return result;
        }

        //子串
        for (int i = 0; i < input.length() - 3; i++) {
            String tempStr = input.substring(i, i + 3);
            String tempStr2 = input.substring(i + 3, input.length());
            if (tempStr2.contains(tempStr)) {
                result = "NG";
                return result;
            }
        }

        result = "OK";
        return result;
    }
}

发表于 2023-07-03 09:08:18 回复(0)
public class Test04 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String pwd = in.nextLine();
            System.out.println(isValid(pwd)?"OK":"NG");
        }
    }
    public static boolean isValid(String pwd){
        //长度小于8
        if(pwd.length()<8){
            return false;
        }
        int lowerCase = 0;
        int upperCase = 0;
        int digit = 0;
        int other = 0;
        for (int i = 0; i < pwd.length(); i++) {
            char a = pwd.charAt(i);
            if (Character.isLowerCase(a)) {
                lowerCase = 1;
            } else if (Character.isUpperCase(a)) {
                upperCase = 1;
            } else if (Character.isDigit(a)) {
                digit = 1;
            } else if (pwd.contains("\n") || pwd.contains(" ")) {

            } else {
                other = 1;
            }
        }
        //大小写,数字,其他符号至少三种(其他符号不包含空格和换行)
        if(lowerCase+upperCase+digit+other<3){
            return false;
        }
        for (int i = 0; i < pwd.length()-2; i++) {
            //双指针找出长度大于2的子串
            int j = i+3;
            String sub = pwd.substring(i, j);
            /*判断子串第一次出现和最后一次出现的位置
                (这里ABABA也会为false)
                if(pwd.indexOf(sub)!=pwd.lastIndexOf(sub)){
                    return false;
                }
             */
            if (pwd.substring(j).contains(sub)) {
                return false;
            }
        }
        return true;
    }
}

发表于 2023-06-03 17:46:18 回复(0)