密码验证合格程序

密码要求:

1.长度超过8位

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

3.不能有相同长度超2的子串重复

说明:长度超过2的子串

输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入

021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出

OK
NG
NG
OK

import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;

/** 
* @author: "TonglingHu"
* @E-mail: hutongling1@163.com
* @date 创建时间:2017年8月19日 下午3:31:10 
* @version 1.0 
* @parameter  
* @since  
* @return  
*/
public class Main {
    static boolean isPasswLeagal(String string){
        if(string==null || string.length()<=8)
            return false;
        Set<Character> set=new LinkedHashSet<>();
        for(int i=0;i<string.length();i++){
            if(string.charAt(i)>='a' && string.charAt(i)<='z')
                set.add('a');
            else if(string.charAt(i)>='A' && string.charAt(i)<='Z')
                set.add('A');
            else if(string.charAt(i)>='0' && string.charAt(i)<='9')
                set.add('0');
            else
                set.add(' ');
        }
        if(set.size()<3)
        {
            set.clear();
            return false;
        }
        LinkedHashMap<String,Integer> map=new LinkedHashMap<>();
        for(int j=3;j<=string.length()/2;j++){
            for(int i=0;i<string.length()-j;i++){
                if(map.containsKey(string.substring(i,i+j)))
                    map.put(string.substring(i,i+j),map.get(string.substring(i,i+j))+1);
                else
                    map.put(string.substring(i,i+j),1);
            }
        }
        //System.out.println( map );
        for(String string2:map.keySet())
            if(map.get(string2)>=2){
                //System.out.println(string2);
                map.clear();
                return false;
            }
        map.clear();
        return true;
    }
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
        String string=in.next();
        if(isPasswLeagal(string))
            System.out.println("OK");
        else
            System.out.println("NG");
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值