java解法
1)先判断字符串长度是否大于8(首要条件);
2)在判断是否包含三种类型的字符,若满足则继续判断是否有重复子字符串,否则标志位全置false,输出“NG”。
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s = sc.next(); boolean flag = true; boolean flag1 = s.length()>8 ? true : false; //字符串长度要大于8 if(judge(s)){ //如果judge判断到满足“三种类型字符以上”条件,则判断是否存在重复子字符串 for(int i=0; i<s.length()-4; i++){ String substr = s.substring(i,i+3); if(s.substring(i+1).contains(substr)) flag = false; //如果存在重复子字符串则标志flag=false } }else{ //如果judge判断到不满足“三种类型字符以上”条件,则所以标志置为false flag = false; flag1 = false; } if(flag && flag1) System.out.println("OK"); else System.out.println("NG"); } } public static boolean judge(String s){ boolean flag1 = false, flag2 = false, flag3 = false, flag4 = false; for(char c : s.toCharArray()){ if(c>='a'&& c<='z') flag1 = true; else if(c>='A'&& c<='Z') flag2 =true; else if(c>='0'&& c<='9') flag3 = true; else flag4 = true; } //满足有其中三种类型的字符则返回true if((flag1 && flag2 && flag3)||(flag1 && flag2 && flag4)||(flag1 && flag3 && flag4)||(flag2 && flag3 &&flag4)){ return true; } else return false; } }