密码要求:
1.长度超过8位
2.包括:大写字母/小写字母/数字/其它符号,以上四种至少三种
3.不能分割出两个相等的长度大于 2 的子串,例如 abcabc 可以分割出两个 abc,不合法,ababa 则无法分割出2个aba。
注:其他符号不含空格或换行
数据范围:输入的字符串长度满足
密码要求:
1.长度超过8位
2.包括:大写字母/小写字母/数字/其它符号,以上四种至少三种
一组字符串。
如果符合要求输出:OK,否则输出NG
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000 021Abc1111
OK NG NG OK OK
import java.util.*; import java.util.regex.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 循环读取输入直到没有更多的行 while (scanner.hasNext()) { String input = scanner.next(); // 检查密码长度是否大于8位 if (input.length() <= 8) { System.out.println("NG"); continue; } // 检查密码是否包含至少三种不同类型的字符 if (getMatch(input)) { System.out.println("NG"); continue; } // 检查密码中是否有长度大于2的重复子串 if (getString(input, 0, 3)) { System.out.println("NG"); continue; } // 如果所有检查都通过,则输出OK System.out.println("OK"); } // 关闭scanner对象 scanner.close(); } // 检查密码是否包含至少三种不同类型的字符 private static boolean getMatch(String str) { // 初始化计数器 int count = 0; // 编译正则表达式模式 Pattern p1 = Pattern.compile("[A-Z]"); // 大写字母 Pattern p2 = Pattern.compile("[a-z]"); // 小写字母 Pattern p3 = Pattern.compile("[0-9]"); // 数字 Pattern p4 = Pattern.compile("[^a-zA-Z0-9]"); // 特殊字符 // 检查密码是否包含大写字母 if (p1.matcher(str).find()) { count++; } // 检查密码是否包含小写字母 if (p2.matcher(str).find()) { count++; } // 检查密码是否包含数字 if (p3.matcher(str).find()) { count++; } // 检查密码是否包含特殊字符 if (p4.matcher(str).find()) { count++; } // 如果密码包含至少三种不同类型的字符,则返回false(不满足NG条件) return count < 3; } // 检查密码中是否有长度大于2的重复子串 private static boolean getString(String str, int l, int r) { // 如果右指针超出字符串长度,则返回false(没有重复子串) if (r >= str.length()) { return false; } // 检查从左指针到右指针的子串是否在右指针之后的位置出现 if (str.substring(r).contains(str.substring(l, r))) { return true; } else { // 如果没有找到重复子串,则向右移动右指针并递归检查 return getString(str, l + 1, r + 1); } } }
import java.util.Scanner; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String passwd = new String(); while (sc.hasNext()) { passwd = sc.nextLine(); //第一步,判断密码长度,密码少于等于8位直接输出NG重新循环 if (passwd.length() <= 8) { System.out.println("NG"); continue; } //第二步判断复杂度 if (!regCheck(passwd)) { System.out.println("NG"); continue; } //第三步无连续重复字符串判断,包括0个但不包括3个 if(!dupCheck(passwd,0,3)){ System.out.println("NG"); continue; }else System.out.println("OK"); } } //连续重复字符串判断 private static boolean dupCheck(String passwd, int s, int e) { //如果索引e已经大于等于密码长度,表明没有连续重复字符串,返回真 if (e >= passwd.length()) { return true; } //如果从索引e开始的子串包含从索引s到索引e的子串,表明有重复连续字符串,返回假 if (passwd.substring(e).contains(passwd.substring(s, e))) { return false; } else { //将起始索引和结束索引加1,重新进行判断 return dupCheck(passwd,s+1,e+1); } } //密码复杂段判断 private static Boolean regCheck(String passwd) { //分别写四个正则式,代表包含数字、小写字母、大写字母以及除了前三个以外的所有字符 Pattern p1 = Pattern.compile("[0-9]"); Pattern p2 = Pattern.compile("[a-z]"); Pattern p3 = Pattern.compile("[A-Z]"); Pattern p4 = Pattern.compile("[^a-zA-Z0-9]"); int count = 0; if (p1.matcher(passwd).find()) count++; if (p2.matcher(passwd).find()) count++; if (p3.matcher(passwd).find()) count++; if (p4.matcher(passwd).find()) count++; if (count >= 3) return true; return false; } }
import java.util.List; import java.util.Scanner; import java.util.concurrent.CopyOnWriteArrayList; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 List<String> str = new CopyOnWriteArrayList<>(); while (in.hasNext()) { // 注意 while 处理多个 case str.add(in.nextLine()); } for (String s : str) { if (s.length() <= 8 ) { System.out.println("NG"); continue; } int i = 0; boolean flag = true ; while (flag && i < s.length() - 6) { for (int j = 3 ; j <= (s.length() - i) / 2; j++) { if (kmp(s.substring(j + i), s.substring(i, j + i))) { flag = false ; break; } } i++; } if (!flag) { System.out.println("NG"); continue; } int count = 0 ; if (s.matches(".*[0-9].*")) { count ++ ; } if (s.matches(".*[a-z].*")) { count ++ ; } if (s.matches(".*[A-Z].*")) { count ++ ; } if (s.matches(".*[\\u00A0\\s\"`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?].*")) { count ++ ; } if (count > 2) { System.out.println("OK"); } else { System.out.println("NG"); } } } /** kop算法 */ private static boolean kmp(String str1, String str2) { int[] next = new int[str2.length()]; for (int i = 1, j = 0; i < str2.length(); i++) { if (str2.charAt(i) == str2.charAt(j)) { j++; next[i] = j; } else if (str2.charAt(i) != str2.charAt(j)) { j = 0; } } for (int i = 0 ; i <= str1.length() - str2.length() ; i++) { for (int j = 0 ; j < str2.length() ; j++) { if (str1.charAt(i) == str2.charAt(j)) { i++; if (j == str2.length() - 1) { return true; } } else { i = i - next[j]; break; } } } return false; } }
import java.util.Scanner; import java.util.regex.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case //检查位数 String pwd = in.nextLine(); if (pwd == null || pwd.length() <= 8) { System.out.println("NG"); return; } //检测格式 String[] patterns = new String[] { "\\d+", "[a-z]+", "[A-Z]+", "[^\\sA-za-z0-9]+" }; int okCount = 0; for (int i = 0; i < patterns.length; i++) { Pattern pattern = Pattern.compile(patterns[i]); if (pattern.matcher(pwd).find()) { // System.out.println(patterns[i] + "通过"); okCount += 1; } } if (okCount < 3) { System.out.println("NG"); return; } //检查重复子串 boolean noReplace = true; for (int i = 0; i < pwd.length() - 3; i++) { String s = pwd.substring(i, i + 3); int checkIndex = i + 1; while(checkIndex< pwd.length() - 3){ if(pwd.indexOf(s,checkIndex)!=-1){ noReplace = false; break; } checkIndex++; } } System.out.println(noReplace?"OK":"NG"); } } }
import java.util.Scanner; public class PasswordVerify { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String password = scanner.nextLine(); isValid(password); } } private static void isValid(String password) { if (password.length() < 8) { System.out.print("NG"); return; } char[] letter = password.toCharArray(); int upperCaseLetter = 0; int lowercaseLetter = 0; int number = 0; int other = 0; for (char c : letter) { if (c >= 'a' && c <= 'z') { lowercaseLetter = 1; } else if (c >= 'A' && c <= 'Z') { upperCaseLetter = 1; } else if (c >= '0' && c <= '9') { number = 1; } else { other = 1; } } if (upperCaseLetter + lowercaseLetter + number + other < 3) { System.out.println("NG"); } else { boolean isValid = true; for (int i = 0; i < letter.length - 3; i++) { for (int j = i + 1; j <= letter.length - 3; j++) { if (letter[i] == letter[j] && letter[i + 1] == letter[j + 1] && letter[i + 2] == letter[j + 2]) { isValid = false; break; } } } if (isValid) { System.out.println("OK"); } else { System.out.println("NG"); } } } }
import java.util.HashSet; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { // 注意 while 处理多个 case String input = in.nextLine(); if(input.length()<=8) { System.out.println("NG"); continue; } boolean[] condition = new boolean[4]; for (int i=0; i<input.length(); i++) { char c = input.charAt(i); if (c>='a' && c<='z') { condition[0] = true; continue; } if (c>='A' && c<='Z') { condition[1] = true; continue; } if (c>='0' && c<='9') { condition[2] = true; continue; } if (c!=' ' && c!='\t') { condition[3] = true; continue; } } int count = 0; for (boolean tmp:condition) { if (tmp) ++count; } if (count < 3) { System.out.println("NG"); continue; } boolean isNG = false; for (int j=0; j<input.length()-3; j++) { String sub = input.substring(j,j+3); String remain = input.substring(j+3); if (remain!=null && remain.contains(sub)) { isNG = true; break; } } if (isNG) { System.out.println("NG"); continue; } System.out.println("OK"); } } }
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args)throws Exception { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String line=null; while((line=br.readLine())!=null){ check(line); } } private static boolean check(String str) { // 长度超过8位 if (str.length() < 8) { System.out.println("NG"); return false; } // 包括至少3种 int count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') { count |= 1 << 0; } else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') { count |= 1 << 1; } else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') { count |= 1 << 2; } else { count |= 1 << 3; } } if (Integer.bitCount(count) < 3) { System.out.println("NG"); return false; } // 不能有长度大于2的包含公共元素的子串重复,子串长度至少3 for (int i = 0; i < str.length() - 3; i++) { String sub = str.substring(i, i + 3); if (str.indexOf(sub, i + 3) != -1) { System.out.println("NG"); return false; } } System.out.println("OK"); return true; } }
public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { String text = in.nextLine(); System.out.println(text.matches(("^(?![a-zA-Z]+$)" + "(?![a-z\\d]+$)" + "(?![a-z[^A-Za-z0-9]]+$)" + "(?![\\d[^A-Za-z0-9]]+$)" + "(?![\\dA-Z]+$)" + "(?![[^A-Za-z0-9]A-Z]+$)" + "[A-Za-z\\d[^A-Za-z0-9]]{8,}$"))&&text.matches("^(?!.*(.{3,}).*\\1).*$") ? "OK" : "NG"); } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String str = in.nextLine(); int res = 0; if (str.contains(" ") || str.length() <= 8 || !check(str)) { System.out.println("NG"); continue; } if(!crl("[a-z]",str)) res++; if(!crl("[A-Z]",str)) res++; if(!crl("[0-9]",str)) res++; if(!crl("[^a-zA-Z0-9]",str)) res++; if (res >= 3) { System.out.println("OK"); } else { System.out.println("NG"); } } } public static boolean crl(String str, String s) { return s.length() == s.replaceAll(str,"").length(); } public static boolean check(String str) { for (int i = 0; i < str.length(); i ++) { for (int j = i + 3; j < str.length() - 3; j++) { if (str.substring(i, i + 3).contains(str.substring(j, j + 3))) { return false; } } } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); while ((in.hasNextLine())){ String str=in.nextLine(); int flag=0; if(str.length()>8){ int arr[]=new int[4]; arr[0]=0;arr[1]=0;arr[2]=0;arr[3]=0; for(int i=0;i<str.length();i++){ if(str.charAt(i)>='a'&&str.charAt(i)<='z'){ arr[0]=arr[0]+1; }else if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){ arr[1]=arr[1]+1; }else if(str.charAt(i)>='0'&&str.charAt(i)<='9') { arr[2]=arr[2]+1; }else if(str.charAt(i)!=' '){ arr[3]=arr[3]+1; } } int count=0; for(int i=0;i<=3;i++){ if(arr[i]>0){ count++; } } if(count>=3){ for(int i=0;i<str.length()-5;i++){ for(int j=i+3;j<str.length()-2;j++){ if(str.charAt(i)==str.charAt(j)&& str.charAt(i+1)==str.charAt(j+1)&& str.charAt(i+2)==str.charAt(j+2)){ flag++; break; } } } }else{ flag++; } }else{ flag++; } if(flag==0){ System.out.println("OK"); }else { System.out.println("NG"); } } } }
import java.util.*; import java.util.regex.Pattern; //用find 匹配单个元素,用set去重看是否有重复子串 public class Main { public String isValid(String str){ if (str.length()<=8){return "NG"; } Pattern lowPattern = Pattern.compile("[a-z]"); Pattern upPattern = Pattern.compile("[A-Z]"); Pattern numPattern = Pattern.compile("\\d"); Pattern otherPattern = Pattern.compile("[^a-zA-z0-9\\t\\n]"); int cnt=0; if (lowPattern.matcher(str).find()){cnt+=1;} if (upPattern.matcher(str).find()){cnt+=1;} if (numPattern.matcher(str).find()){cnt+=1;} if (otherPattern.matcher(str).find()){cnt+=1;} if (cnt<3){return "NG";} HashSet<String> set = new HashSet<>(); for (int i = 0; i < str.length()-2; i++) { String newStr = str.substring(i, i + 3); set.add(newStr); } if (set.size()<str.length()-2){return "NG";} return "OK"; } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String str=in.nextLine(); System.out.println(new Main().isValid(str)); } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String a = in.nextLine(); if(a.length()<=8){ System.out.println("NG"); continue; } int count=0; if(a.matches(".*[a-z].*")){ count++; } if(a.matches(".*[A-Z].*")){ count++; } if(a.matches(".*[0-9].*")){ count++; } if(a.matches(".*[^a-zA-Z0-9].*")){ count++; } if(count<3){ System.out.println("NG"); continue; } boolean dul=false; for(int i=0;i<a.length()-4;i++){ String left=a.substring(i+3); String cur=a.substring(i,i+3); if(left.contains(cur)&&!cur.isEmpty()){ dul=true; break; } } if(dul){ System.out.println("NG"); }else{ System.out.println("OK"); } } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String input = in.nextLine(); System.out.println(ifOK(input)); } } // public static String ifOK(String input) { String result = new String(); int charTypeNum = 0; //密码长度 if (input.length() < 9) { result = "NG"; return result; } //符号种类 for (int i = 0; i < input.length(); i++) { if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') { charTypeNum++; break; } } for (int i = 0; i < input.length(); i++) { if (input.charAt(i) >= 'a' && input.charAt(i) <= 'z') { charTypeNum++; break; } } for (int i = 0; i < input.length(); i++) { if (input.charAt(i) >= '0' && input.charAt(i) <= '9') { charTypeNum++; break; } } for (int i = 0; i < input.length(); i++) { if (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') { continue; } if (input.charAt(i) >= 'a' && input.charAt(i) <= 'z') { continue; } if (input.charAt(i) >= '0' && input.charAt(i) <= '9') { continue; } if (input.charAt(i) == ' ' || input.charAt(i) == '\n') { continue; } charTypeNum++; break; } if (charTypeNum < 3) { result = "NG"; return result; } //子串 for (int i = 0; i < input.length() - 3; i++) { String tempStr = input.substring(i, i + 3); String tempStr2 = input.substring(i + 3, input.length()); if (tempStr2.contains(tempStr)) { result = "NG"; return result; } } result = "OK"; return result; } }
public class Test04 { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String pwd = in.nextLine(); System.out.println(isValid(pwd)?"OK":"NG"); } } public static boolean isValid(String pwd){ //长度小于8 if(pwd.length()<8){ return false; } int lowerCase = 0; int upperCase = 0; int digit = 0; int other = 0; for (int i = 0; i < pwd.length(); i++) { char a = pwd.charAt(i); if (Character.isLowerCase(a)) { lowerCase = 1; } else if (Character.isUpperCase(a)) { upperCase = 1; } else if (Character.isDigit(a)) { digit = 1; } else if (pwd.contains("\n") || pwd.contains(" ")) { } else { other = 1; } } //大小写,数字,其他符号至少三种(其他符号不包含空格和换行) if(lowerCase+upperCase+digit+other<3){ return false; } for (int i = 0; i < pwd.length()-2; i++) { //双指针找出长度大于2的子串 int j = i+3; String sub = pwd.substring(i, j); /*判断子串第一次出现和最后一次出现的位置 (这里ABABA也会为false) if(pwd.indexOf(sub)!=pwd.lastIndexOf(sub)){ return false; } */ if (pwd.substring(j).contains(sub)) { return false; } } return true; } }