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

密码验证合格程序

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

//JAVA
//难点应该在需求3.不能有相同长度大于2的子串重复
//用正则表达式

import java.util.*;
import java.util.regex.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.nextLine();
            if(isLengthQualified(str) && isContentQualified(str) &&!hasDuplicatedString(str))
                System.out.println("OK");
            else
                System.out.println("NG");
        }
        sc.close();
    }
    //1.长度超过8位
    public static boolean isLengthQualified(String s){
        return s.length()>8;
    }
    //2.包括大小写字母.数字.其它符号,以上四种至少三种
    public static boolean isContentQualified(String s){
        int count=0;
        //正则
        String[] str={"[a-z]","[A-Z]","[0-9]","[^a-zA-Z0-9]"};
        for(int i=0;i<str.length;i++){
            Pattern p=Pattern.compile(str[i]);
            Matcher m=p.matcher(s);
            if(m.find())
                count++;
        }
        return count>=3;

    }
    //3.不能有相同长度大于2的子串重复
    public static boolean hasDuplicatedString(String s){
        for(int i=0;i<s.length()-3;i++){
            //可以想象成这个重复的子串长度为1,
            //相当于字符去比较,遍历这个字符串中所有长度为3的子串,
            //剩下的字符串里面是否包含这个子串
            if(s.substring(i+3).contains(s.substring(i,i+3)))
                return true;
        }
        return false;
    }
}
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务