华为OD机试 - 密码输入检测(Java & JS & Python & C & C++)
以下是不同编程语言的解决方案:
Java:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
boolean isValid = isValidPassword(password);
System.out.println(isValid ? "YES" : "NO");
}
private static boolean isValidPassword(String password) {
// 密码规则:长度至少为8,包含大写字母、小写字母、数字、特殊字符,无重复字符
if (password.length() < 8) return false;
boolean hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;
char[] chars = password.toCharArray();
for (char c : chars) {
if (Character.isUpperCase(c)) hasUpper = true;
else if (Character.isLowerCase(c)) hasLower = true;
else if (Character.isDigit(c)) hasDigit = true;
else if (!isSafe(c)) hasSpecial = true;
}
return hasUpper && hasLower && hasDigit && hasSpecial;
}
private static boolean isSafe(char c) {
// 这里定义的特殊字符集可以根据实际需求进行调整
return "!@#$%^&*()_+=[]{}|\\;':\",./<>?".indexOf(c) >= 0;
}
}
JavaScript:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter the password: ', (password) => {
rl.close();
console.log(isValidPassword(password) ? "YES" : "NO");
});
function isValidPassword(password) {
// 密码规则:长度至少为8,包含大写字母、小写字母、数字、特殊字符,无重复字符
if (password.length < 8) return false;
let hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;
for (let i = 0; i < password.length; i++) {
const c = password[i];
if (/[A-Z]/.test(c)) hasUpper = true;
else if (/[a-z]/.test(c)) hasLower = true;
else if (/[0-9]/.test(c)) hasDigit = true;
else if (!isSafe(c)) hasSpecial = true;
}
return hasUpper && hasLower && hasDigit && hasSpecial;
}
function isSafe(c) {
// 这里定义的特殊字符集可以根据实际需求进行调整
return "!@#$%^&*()_+=[]{}|\\;':\",./<>?".includes(c);
}
Python:
def is_valid_password(password):
# 密码规则:长度至少为8,包含大写字母、小写字母、数字、特殊字符,无重复字符
if len(password) < 8:
return False
has_upper = False
has_lower = False
has_digit = False
has_special = False
for c in password:
评论已关闭