题目
题目链接
解题思路
这是一道密码验证题目,需要检查以下条件:
-
密码规则:
- 只能由大写字母、小写字母、数字构成
- 不能以数字开头
- 必须至少包含两种字符类型
- 长度至少为8
-
验证步骤:
- 检查长度是否大于等于8
- 检查首字符是否为数字
- 统计各类字符数量
- 检查是否包含非法字符
- 检查字符类型是否满足要求
代码
#include <iostream>
#include <string>
using namespace std;bool checkPassword(const string& pwd) {// 检查长度if (pwd.length() < 8) return false;// 检查首字符if (isdigit(pwd[0])) return false;// 统计字符int upper = 0, lower = 0, digit = 0;for (char c : pwd) {if (isupper(c)) upper++;else if (islower(c)) lower++;else if (isdigit(c)) digit++;else return false; // 非法字符}// 检查字符类型数量int types = (upper > 0) + (lower > 0) + (digit > 0);return types >= 2;
}int main() {int n;cin >> n;while (n--) {string pwd;cin >> pwd;cout << (checkPassword(pwd) ? "YES" : "NO") << endl;}return 0;
}
import java.util.Scanner;public class Main {public static boolean checkPassword(String pwd) {// 检查长度if (pwd.length() < 8) return false;// 检查首字符if (Character.isDigit(pwd.charAt(0))) return false;// 统计字符int upper = 0, lower = 0, digit = 0;for (char c : pwd.toCharArray()) {if (Character.isUpperCase(c)) upper++;else if (Character.isLowerCase(c)) lower++;else if (Character.isDigit(c)) digit++;else return false; // 非法字符}// 检查字符类型数量int types = (upper > 0 ? 1 : 0) + (lower > 0 ? 1 : 0) + (digit > 0 ? 1 : 0);return types >= 2;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();while (n-- > 0) {String pwd = sc.next();System.out.println(checkPassword(pwd) ? "YES" : "NO");}}
}
def check_password(pwd):# 检查长度if len(pwd) < 8:return False# 检查首字符if pwd[0].isdigit():return False# 统计字符upper = sum(1 for c in pwd if c.isupper())lower = sum(1 for c in pwd if c.islower())digit = sum(1 for c in pwd if c.isdigit())# 检查是否包含非法字符if len(pwd) != upper + lower + digit:return False# 检查字符类型数量types = (upper > 0) + (lower > 0) + (digit > 0)return types >= 2def main():n = int(input())for _ in range(n):pwd = input().strip()print("YES" if check_password(pwd) else "NO")if __name__ == "__main__":main()
算法及复杂度
- 算法:字符串处理
- 时间复杂度:\(\mathcal{O}(n \times L)\) - \(n\) 为密码数量,\(L\) 为密码长度
- 空间复杂度:\(\mathcal{O}(1)\) - 只需要常数级别的额外空间