/*
* .長度超過8位
2.包括大小寫字母.數字.其它符號,以上四種至少三種
3.不能有相同長度超2的子串重複
*/
//解題思路:只需要按要求一步一步來就行,我用的最笨的方法,其中在驗證字符重複時,使用的兩層循環,第二層循環就開始查看有沒有與第一層相同的字符,如果有的話,一個while,直到沒有相同的結束,此時看共多少個一樣的,如果超過兩個就是NG.
import java.util.*;
public class huiwen{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=null;
int len=0;
boolean re=true;
while(sc.hasNext()){
s=sc.nextLine();
len=s.length();
//判斷這個串是否正確
re=pim(s);if(re)
System.out.println("OK");
else
System.out.println("NG");
}
}
//判斷串函數
public static boolean pim(String s){int len=s.length();
int[] a = new int[4];
//先驗證長度
if(len<=8)return false;
//然後驗證至少三種字符
for(int i=0;i<len;i++){if(s.charAt(i)>='0'&&s.charAt(i)<='9')
a[0]=1;
else if(s.charAt(i)>='A'&&s.charAt(i)<='Z')
a[1]=1;
else if(s.charAt(i)>='a'&&s.charAt(i)<='z')
a[2]=1;
else
a[3]=1;
}
int count=0;
for(int i=0;i<4;i++)
if(a[i]==1)
count++;
if(count<3)
return false;
else{
//再驗證是否重複大於2
for(int i=0;i<len;i++)for(int j=i+1;j<len;j++){
if(s.charAt(j)==s.charAt(i)){
int k;
for(k=0;k<len-j;k++){
if(s.charAt(j+k)!=s.charAt(i+k))
break;
}
if(k>2)
return false;
}
}
}
return true;
}
}