【华为OJ20】密码验证合格程序
原创
©著作权归作者所有:来自51CTO博客作者wx637b060b079f7的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
密码要求:
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
输入例子:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出例子:
import java.util.Scanner;
/**
* 密码验证
* a-z:97-122
A-Z:65-90
0-9:48-57
*@Date 2016/9/20
* @author WGS
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str2=sc.nextLine();
if(isValidString(str2)){
System.out.println("OK");
}else{
System.out.println("NG");
}
}
sc.close();
}
private static boolean isValidString(String str) {
//1 验证长度:长度超过8位
if(str== null ||str.length()<= 8){
return false;
}
// 2.包括大小写字母.数字.其它符号,以上四种至少三种
int typeCount=0;
int[] type=new int[4];
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
int cNum=(int)c;
if(cNum >=97 && cNum<= 122){
type[0]=1;
}else if(cNum >=65 && cNum<=90){
type[1]=1;
}else if(cNum >=48 && cNum<=57){
type[2]=1;
}else{
type[3]=1;
}
}
for(int i=0;i<type.length;i++){
typeCount+=type[i];
}
if(typeCount<3)
return false;
//3不能有相同长度超2的子串重复
for(int i=0;i<str.length()-3;i++){
String s=str.substring(i, i+3);
String tempStr=str.substring(i+3, str.length());
if(tempStr.contains(s)){
return false;
}
}
return true;
}
}