题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
按照密码的要求,依次遍历验证即可。
1、首先验证长度是否大于8,不满足直接输出NG并继续
2、统计字符种类,验证是否包含三种以上的字符
3、不能有长度大于2的不含公共元素的子串重复 即 有>=3的重复子串 就NG,如021Abcd9Abcd1中的Abc。实现方式:判断
[i+3,str.length)中是否含[i,i+3) 的字符串; i逐个往后移动
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String s = sc.nextLine(); //条件1:长度超过8位 if (s.length() <= 8) { System.out.println("NG"); continue; // 即 不执行 本次循环 接下来内容 } //条件2.包括大小写字母.数字.其它符号,以上四种至少三种 int count[] = new int[4];//记录出现 类别个数 for (int i = 0; i < s.length(); i++) { if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') { count[0] = 1; } else if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') { count[1] = 1; } else if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { count[2] = 1; } else { count[3] = 1; } } if (count[0] + count[1] + count[2] + count[3] < 3) { System.out.println("NG"); continue; } //3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行) 即 有>=3的重复子串 就NG,如021Abcd9Abcd1中的Abc if (judgeRepeat(s)) { System.out.println("NG"); continue; } else { System.out.println("OK"); } } } //检测是否存在长度大于3的重复子串 private static boolean judgeRepeat(String s) { for (int i = 0; i + 3 < s.length(); i++) { if (s.substring(i + 3).contains(s.substring(i, i + 3))) { // 即 判断 [r,str.length)中是否含[l,r) 的字符串; l逐个往后移动 return true; } } return false; } static boolean getString(String str, int l, int r) { if (r >= str.length()) { return false; } if (str.substring(r).contains(str.substring(l, r))) { // 即 判断 [r,str.length)中是否含[l,r) 的字符串; l逐个往后移动 return true; } else { return getString(str, l + 1, r + 1); } } }