题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
Java解法
用到了一下方法:
's.indexOf(string_s)' 返回对应字符串在s中的下标(可用来判断是否含有某个字符,不存在会返回-1)
'Character.isLetterOrDigit(char_c)' 判断是否是字母或数字
's.substring(index)' 返回从index开始的子串
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNextLine()) {
String s = in.nextLine();
if(s.length()<8) {
System.out.println("NG");
continue;
}
if(s.indexOf(" ")>=0 || s.indexOf("\n")>=0) {
System.out.println("NG");
continue;
}
if(isSingle(s)==false) {
System.out.println("NG");
continue;
}
if(num(s)<3) {
System.out.println("NG");
continue;
}
System.out.println("OK");
}
}
public static int num(String s) {
int sum=0;
if(s.toLowerCase()!=s) {
sum++;
}
if(s.toUpperCase()!=s) {
sum++;
}
int flag1=0, flag2=0;
for(int i=0;i<s.length();i++) {
char c = s.charAt(i);
if(Character.isDigit(c)==true && flag1==0) {
sum++;
flag1=1;
}else if(Character.isLetterOrDigit(c)==false && s.indexOf(" ")<0 && s.indexOf("\n")<0 && flag2==0) {
sum++;
flag2=1;
}
if(flag1==1 && flag2==1){
break;
}
}
return sum;
}
public static boolean isSingle(String s) {
for (int i = 3; i < s.length(); i++) {
if (s.substring(i).contains(s.substring(i - 3, i))) {
return false;
}
}
return true;
}
}