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

密码验证合格程序

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String input = null;
        while((input = reader.readLine()) != null){
            if(input.length() > 8 && hasThreeValidChars(input) && noRepeat(input)){
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
        }
    }
    // 判断是否有超过三个有效字符
    public static boolean hasThreeValidChars(String str){
        int[] validChars = new int[4];
        for(Character ch : str.toCharArray()){
            if(Character.isLetter(ch)){
                if(ch >= 65 && ch <= 90){
                    validChars[0] = 1;
                } else if(ch >= 97 && ch <= 122){
                    validChars[1] = 1;
                }
            }else if(Character.isDigit(ch)){
                validChars[2] = 1;
            } else {
                validChars[3] = 1;
            }
        }
        int count = 0;
        for(int i : validChars){
            count += i;
        }
        return count >= 3;
    }
    // 判断是否有长度大于2的重复子字符串
    public static boolean noRepeat(String str){
        /**
         * 思路是从前往后依次遍历长度为3的子字符串,看看lastIndexOf是否大于当前索引
         */
        for(int i = 0; i < str.length() - 2; i++){
            String compare = str.substring(i, i + 3);
            if(str.lastIndexOf(compare) > i){
                return false;
            }
        }
        return true;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务