Java题解 | HJ20 #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
数据范围:输入的字符串长度满足 1≤n≤100
输入描述:
一组字符串。
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
复制
输出:
OK
NG
NG
OK
解法
该题考察字符串操作及正则表达式的用法。正则表达式用于校验是否出现了指定的字符。校验是否有重复子串可以采用递归方式不断往后校验字符串是否有重复子串。
代码如下:
/*
* Copyright (c) waylau.com, 2022. All rights reserved.
*/
package com.waylau.nowcoder.exam.oj.huawei;
import java.util.Scanner;
import java.util.regex.Pattern;
/**
* HJ20 密码验证合格程序.
* 描述:密码要求:1.长度超过8位
* 2.包括大小写字母.数字.其它符号,以上四种至少三种
* 3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
* 数据范围:输入的字符串长度满足 1≤n≤100
* 输入描述:一组字符串。
* 输出描述:如果符合要求输出:OK,否则输出NG
*
* @author <a href="https://waylau.com">Way Lau</a>
* @since 2022-08-15
*/
public class HJ020PasswordVerificationQualification {
public static void main(String[] args) {
// 输入
Scanner sc = new Scanner(System.in);
String result = "NG";
while (sc.hasNext()) {
String line = sc.nextLine();
if (line.length() > 8 && isStringMatched(line)
&& !isRepeatedString(line, 0, 3)) {
result = "OK";
}
}
// 输出
System.out.println(result);
// 关闭
sc.close();
}
// 检查是否满足正则
private static boolean isStringMatched(String str) {
int count = 0;
Pattern p1 = Pattern.compile("[A-Z]");
if (p1.matcher(str).find()) {
count++;
}
Pattern p2 = Pattern.compile("[a-z]");
if (p2.matcher(str).find()) {
count++;
}
Pattern p3 = Pattern.compile("[0-9]");
if (p3.matcher(str).find()) {
count++;
}
Pattern p4 = Pattern.compile("[^a-zA-Z0-9]");
if (p4.matcher(str).find()) {
count++;
}
if (count >= 3) {
return true;
} else {
return false;
}
}
// 递归校验是否有重复子串
private static boolean isRepeatedString(String str,
int l, int r) {
if (r >= str.length()) {
return false;
}
if (str.substring(r)
.contains(str.substring(l, r))) {
return true;
} else {
return isRepeatedString(str, l + 1, r + 1);
}
}
}
参考引用
- 本系列归档至https://github.com/waylau/nowcoder-exam-oj
- 《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
- 《数据结构和算法基础(Java 语言实现)》(柳伟卫著,北京大学出版社出版):https://item.jd.com/13014179.html
#华为机考#