码迷,mamicode.com
首页 > 其他好文 > 详细

华为oj之密码验证合格程序

时间:2015-06-09 17:30:14      阅读:1376      评论:0      收藏:0      [点我收藏+]

标签:java   华为oj   动态规划   

密码要求: 

1.长度超过8位 

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

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

判断字符类型时采用位标记,判断重复子串时使用动态规划

import java.util.Scanner;

public class Main{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
			String pwd=sc.nextLine();
			if(isok(pwd))
			{
				System.out.println("OK");
			}
			else {
				System.out.println("NG");
			}
		}
		sc.close();
	}
	public static boolean isok(String pwd)
	{
		boolean result=false;
		if(pwd.length()>8)//长度要求大于8
		{
			//用一个int型来表示四种类型是否存在,一个用一位
			int flag=0;
			//遍历标记类型
			for(int i=0;i<pwd.length();i++)
			{
				char tmp=pwd.charAt(i);
				if(tmp>='a'&&tmp<='z')
				{
					flag=flag|8;
				}
				else if(tmp>='A'&&tmp<='Z')
				{
					flag=flag|4;
				}
				else if(tmp>='0'&&tmp<='9')
				{
					flag=flag|2;
				}
				else
				{
					flag=flag|1;
				}
			}
			if((flag&15)==15||(flag&15)==7||(flag&15)==11||(flag&15)==13||(flag&15)==14)//至少存在三种不同类型字符
			{
				if(maxSame(pwd)<=2)//不存在长度大于2的相同子串
				{
					result=true;
				}
			}			
		}
		return result;
	}
	//用动态规划的方法来求字符串中最长的相同子串长度
	public static int maxSame(String str)
	{
			int[][] max=new int[str.length()][str.length()];//声明存储空间,只用一个下三角就可以了,代表从i开始与从j开始的子串与多长相同
			int maxlen=0;
			//处理初始值
			for(int i=0;i<str.length()-1;i++)
			{
				if(str.charAt(i)==str.charAt(str.length()-1))
				{
					max[i][str.length()-1]=1;
					maxlen=1;
				}
			}
			//递推关系为,若str.charAt(i)==str.charAt(j)则max[i][j]=max[i+1][j+1]+1,否则max[i][j]=0
			for(int j=str.length()-2;j>0;j--)//从下向上从右向左遍历下三角
			{
				for(int i=j-1;i>=0;i--)
				{
					if(str.charAt(i)==str.charAt(j))
					{
						max[i][j]=max[i+1][j+1]+1;
						//更新最长相同长度
						if(max[i][j]>maxlen)
						{
							maxlen=max[i][j];
						}
					}
					else {
						max[i][j]=0;
					}
				}
			}
			return maxlen;
	}
}


华为oj之密码验证合格程序

标签:java   华为oj   动态规划   

原文地址:http://blog.csdn.net/mushao999/article/details/46426647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!