华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定用户密码输入流input,输入流中字符 ‘<’ 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。
密码安全要求如下:
- 密码长度>=8;
- 密码至少需要包含1个大写字母:
- 密码至少需要包含1个小写字母;
- 密码至少需要包含1个数字;
- 密码至少需要包含1个字母和数字以外的非空白特殊字符;
注意空串退格后仍然为空串,且用户输入的字符串不包含 ‘<’ 字符和空白字符。
二、输入描述
用一行字符串表示输入的用户数据,输入的字符串中 ‘<’ 字符标识退格,用户输入的字符串不包含空白字符,例如:ABC<c89%000<
三、输出描述
输出经过程序处理后,输出的实际密码字符串,并输出该密码字符串是否满足密码安全要求。两者间由 ‘,’ 分隔,例如:ABc89%00,true
四、解题思路
1、处理退格符:
使用一个栈(Stack)或可变字符串(StringBuilder)来处理输入字符串中的退格符。遍历输入字符串,对于普通字符,将其添加到栈或StringBuilder中;对于退格符’<',如果栈/字符串不为空,则移除最后一个字符。
2、验证密码规则:
需要验证密码是否满足以下条件:
- 至少8个字符长。
- 至少一个大写字母。
- 至少一个小写字母。
- 至少一个数字。
- 至少一个特殊字符(既非字母也非数字的字符)。
创建相应的标志变量来跟踪每个条件是否被满足,然后遍历最终的密码字符串来更新这些标志。
3、输出结果:
根据上述验证结果,输出密码字符串及其是否符合安全要求的标志。
五、Java算法源码
public class OdTest01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();String password = processInput(input);boolean isValid = validatePassword(password);System.out.println(password + "," + isValid);}// 处理输入,考虑退格符private static String processInput(String input) {StringBuilder sb = new StringBuilder();for (char ch : input.toCharArray()) {if (ch == '<') {if (sb.length() > 0) {sb.deleteCharAt(sb.length() - 1);}} else {sb.append(ch);}}return sb.toString();}// 验证密码是否满足指定的安全要求private static boolean validatePassword(String password) {if (password.length() < 8) {return false;}boolean hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;for (int i = 0; i < password.length(); i++) {char c = password.charAt(i);if (Character.isUpperCase(c)) {hasUpper = true;} else if (Character.isLowerCase(c)) {hasLower = true;} else if (Character.isDigit(c)) {hasDigit = true;} else {hasSpecial = true;}}return hasUpper && hasLower && hasDigit && hasSpecial;}
}
六、效果展示
1、输入
ABC<c89%000<
2、输出
ABc89%00,true
3、说明
多余的C和0由于退格被去除,最终用户输入的密码为ABc89%00,且满足密码安全要求输出true
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。