题目描述

  • 密码要求:
  • 1.长度超过8位
    2.包括大小写字母.数字.其它符号,以上四种至少三种
    3.不能有相同长度大于2的子串重复
  • 输入描述:
    一组或多组长度超过2的字符串。每组占一行
  • 输出描述:
    如果符合要求输出:OK,否则输出NG
  • 示例1
    输入
    021Abc9000
    021Abc9Abc1
    021ABC9000
    021$bc9000
  • 输出
    OK
    NG
    NG
    OK

代码

public class Huawei密码验证合格程序 {

public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str;
StringBuffer sb = new StringBuffer();
while (!(str = reader.readLine()).equals("")) {
String result = "OK";
//长度超过8位
if (str.length() < 9) {
result = "NG";
} else {
char[] chars = str.toCharArray();
int a = 0, A = 0, n = 0, c = 0;
//至少三种类型
for (int i = 0; i < chars.length; i++) {
if (chars[i] >= 'a' && chars[i] <= 'z') {
a = 1;
} else if (chars[i] >= 'A' && chars[i] <= 'Z') {
A = 1;
} else if (chars[i] >= '0' && chars[i] <= '9') {
n = 1;
} else {
c = 1;
}
//不能有相同长度大于2的子串重复
if (i + 2 + 3 < chars.length) {
for (int j = i + 3; j < chars.length - 2; j++) {
if (chars[i] == chars[j] && chars[i + 1] == chars[j + 1] && chars[i + 2] == chars[j + 2]) {
result = "NG";
break;
}
}
}
}
if (a + A + n + c < 3) {
result = "NG";
}
}
sb.append(result).append("\n");
}
System.out.println(sb.toString());

}