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

密码验证合格程序

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

import java.util.Scanner;

public class Main { private static Object Solution;

public static void main(String[] args) {
    //输入
    Scanner scanner=new Scanner(System.in);
    String str;
    int i=0;
    while(scanner.hasNextLine()){
        str=scanner.nextLine();
        if (check(str)) System.out.println("OK");
        else System.out.println("NG");
    }
}

//验证密码是否合规,合规返回true,不合规返回false
private static boolean check(String str) {
    //判断长度
    if (str.length()<=8)return false;

    //基于状态机,判断规则二是否满足
    int count=0;
    boolean flag=false;//标记是否满足规则二
    char[] s=str.toCharArray();
    outter:for (char c :
            s) {
        switch (count){
            case -1:
                flag=true;
                break outter;
            case 0:
                if(Character.isUpperCase(c))count=1;
                else if (Character.isLowerCase(c))count=2;
                else if (Character.isDigit(c))count=3;
                else if (!Character.isSpaceChar(c)&&c!='\n')count=4;
                break;
            case 1:
                if (Character.isLowerCase(c))count=5;
                else if (Character.isDigit(c))count=6;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=7;
                break;
            case 2:
                if(Character.isUpperCase(c))count=5;
                else if (Character.isDigit(c))count=9;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=10;
                break;
            case 3:
                if(Character.isUpperCase(c))count=6;
                else if (Character.isLowerCase(c))count=9;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=13;
                break;
            case 4:
                if(Character.isUpperCase(c))count=7;
                else if (Character.isLowerCase(c))count=10;
                else if (Character.isDigit(c))count=13;
                break;
            case 5:
                if (Character.isDigit(c))count=-1;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
                break;
            case 6:
                if (Character.isLowerCase(c))count=-1;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
                break;
            case 7:
                if (Character.isLowerCase(c))count=-1;
                else if (Character.isDigit(c))count=-1;
                break;
            case 9:
                if(Character.isUpperCase(c))count=-1;
                else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
                break;
            case 10:
                if(Character.isUpperCase(c))count=-1;
                else if (Character.isDigit(c))count=-1;
                break;
            case 13:
                if(Character.isUpperCase(c))count=-1;
                else if (Character.isLowerCase(c))count=-1;
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + count);
        }
    }
    if (!flag)return false;

    //规则三
    for (int i = 0; i < str.length()-2; i++) {
        for (int j = i+1; j < str.length()-2; j++) {
            if (str.substring(i,i+3).equals(str.substring(j,j+3))){
                return false;
            }
        }
    }

    return true;
}

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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