当前位置: 首页 > news >正文

(100分)- 密码输入检测(Java JS Python C)

(100分)- 密码输入检测(Java & JS & Python & C)

题目描述

给定用户密码输入流 input,输入流中字符 '<' 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。

密码安全要求如下:

  1. 密码长度 ≥ 8;
  2. 密码至少需要包含 1 个大写字母;
  3. 密码至少需要包含 1 个小写字母;
  4. 密码至少需要包含 1 个数字;
  5. 密码至少需要包含 1 个字母和数字以外的非空白特殊字符;

注意空串退格后仍然为空串,且用户输入的字符串不包含 '<' 字符和空白字符。

输入描述

用一行字符串表示输入的用户数据,输入的字符串中 '<' 字符标识退格,用户输入的字符串不包含空白字符,例如:

ABC<c89%000<

输出描述

输出经过程序处理后,输出的实际密码字符串,并输出改密码字符串是否满足密码安全要求。两者间由 ',' 分隔, 例如:

ABc89%00,true

用例
输入ABC<c89%000<
输出ABc89%00,true
说明多余的C和0由于退格被去除,最终用户输入的密码为ABc89%00,且满足密码安全要求,输出true
题目解析

我们可以通过栈结构来模拟输入过程:将字符压入栈来模拟输入操作,遇到退格符'<'时则弹出栈顶元素。

最终需要检查栈中字符是否满足以下条件:

  1. 总字符数≥8
  2. 至少包含1个小写字母
  3. 至少包含1个大写字母
  4. 至少包含1个数字
  5. 至少包含1个非字母数字空白字符

若满足所有条件,则将栈内字符拼接为字符串并追加"true";否则追加"false"。

JavaScript算法源码
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { const s = await readline(); const stack = []; for (let c of s) { if (c == "<") { if (stack.length == 0) continue; stack.pop(); } else { stack.push(c); } } let upper = 0; let lower = 0; let number = 0; let non_letter_number = 0; const password = []; for (let c of stack) { password.push(c); if (c >= "a" && c <= "z") { lower++; } else if (c >= "A" && c <= "Z") { upper++; } else if (c >= "0" && c <= "9") { number++; } else { non_letter_number++; } } if ( password.length >= 8 && lower >= 1 && upper >= 1 && non_letter_number >= 1 ) { password.push(",true"); } else { password.push(",false"); } console.log(password.join("")); })();
Java算法源码
import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); LinkedList<Character> stack = new LinkedList<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '<') { if (stack.isEmpty()) continue; stack.removeLast(); } else { stack.addLast(c); } } int upper = 0; int lower = 0; int number = 0; int non_letter_number = 0; StringBuilder password = new StringBuilder(); for (Character c : stack) { password.append(c); if (c >= 'a' && c <= 'z') { lower++; } else if (c >= 'A' && c <= 'Z') { upper++; } else if (c >= '0' && c <= '9') { number++; } else { non_letter_number++; } } if (password.length() >= 8 && lower >= 1 && upper >= 1 && number >= 1 && non_letter_number >= 1) { password.append(",true"); } else { password.append(",false"); } System.out.println(password); } }
Python算法源码
# 输入获取 s = input() # 算法入口 def getResult(): stack = [] for c in s: if c == '<': if len(stack) > 0: stack.pop() else: stack.append(c) upper = 0 lower = 0 number = 0 non_letter_number = 0 password = [] for c in stack: password.append(c) if 'z' >= c >= 'a': lower += 1 elif 'Z' >= c >= 'A': upper += 1 elif '9' >= c >= '0': number += 1 else: non_letter_number += 1 if len(password) >= 8 and lower >= 1 and upper >= 1 and number >= 1 and non_letter_number >= 1: password.append(",true") else: password.append(",false") return "".join(password) # 算法调用 print(getResult())
C算法源码
#include <stdio.h> #include <string.h> #define MAX_SIZE 100000 int main() { char s[MAX_SIZE]; gets(s); unsigned long long len = strlen(s); char stack[MAX_SIZE]; int stack_size = 0; int upper = 0; int lower = 0; int number = 0; int non_letter_number = 0; for (int i = 0; i < len; i++) { char key; int val; if (s[i] == '<') { if (stack_size > 0) { key = stack[stack_size - 1]; val = -1; stack_size--; } else { continue; } } else { key = s[i]; val = 1; stack[stack_size++] = s[i]; } if (key >= 'a' && key <= 'z') { lower += val; } else if (key >= 'A' && key <= 'Z') { upper += val; } else if (key >= '0' && key <= '9') { number += val; } else { non_letter_number += val; } } stack[stack_size] = '\0'; if(stack_size >= 8 && lower >= 1 && upper >= 1 && number >= 1 && non_letter_number >= 1) { strcat(stack, ",true"); } else { strcat(stack, ",false"); } puts(stack); return 0; }
http://www.jsqmd.com/news/433947/

相关文章:

  • (100分)- 密钥格式化(Java JS Python)
  • 电动夹爪哪家更靠谱?自动化产线专用夹爪品牌实测对比推荐 - 品牌2026
  • 2026年知名的推拉棚销售厂家哪家好 - 品牌宣传支持者
  • 2026年电磁夹爪供应商怎么挑?可靠供应商厂家名单与选型要点 - 品牌2026
  • 【小沐学AI】解锁Claude Code,小白也能玩转AI编程
  • 2026年知名的灯带批发/灯带定制值得信赖的生产厂家 - 品牌宣传支持者
  • 基于Java+SSM+Flask智能训练管理平台(源码+LW+调试文档+讲解等)/智能训练/管理平台/训练软件/训练系统/智能化训练/训练计划/训练效果评估/训练数据分析/训练管理解决方案
  • 基于Java+SSM+Flask儿童教育网站(源码+LW+调试文档+讲解等)/儿童教育/教育网站/儿童学习/网上教育/孩子教育/学习资源/儿童成长/教育资源/儿童乐园/在线课程
  • 小白刷力扣100(3)-最长连续序列
  • 企业级健身俱乐部网站管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • Java Web 考研互助交流平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • SpringBoot+Vue 疫情防控管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 电动自行车违法智能识别
  • 智能安防中的行人识别技术
  • 2026年热门的智能家具用电线材实力工厂怎么选 - 品牌宣传支持者
  • 【2025最新】基于SpringBoot+Vue的科研管理系统管理系统源码+MyBatis+MySQL
  • Linux系统常用命令(其三)进程与系统监控、文件权限
  • 双臂协作机器人 LZDR750-5NLF 介绍
  • 跨国企业在中国月报 | 雀巢、资生堂、迪士尼、迪卡侬、蔡司、立邦、DHL等公司动态
  • Rust 语言开发的 Linux 桌面来了
  • Linux救援模式是什么,如何使用
  • Linux 程序地址空间深度解析:虚拟地址背后的真相
  • 【实战复盘】TryBanana2:基于 Nano Banana 2 的 4K AI 图像生成与编辑工作流
  • 2026年口碑好的手刹冲压件值得信赖的生产厂家 - 品牌宣传支持者
  • 2026年靠谱的油烟净化风机实力厂家如何选 - 品牌宣传支持者
  • 中国电缆一线品牌推荐:2026年3月中国电缆标杆品牌推荐 - 品牌2026
  • 中国电缆一线品牌推荐:石油石化、矿山煤矿、变频、光伏电缆等品牌推荐 - 品牌2026
  • 电缆生产厂家推荐名单:2026年3月电缆生产厂家推荐及相关厂家汇总 - 品牌2026
  • 2026年靠谱的风机/工业风机销售厂家哪家好 - 品牌宣传支持者
  • 铁路地铁电力电缆生产厂家推荐:含中低压、低压、中压、变频电缆等厂家 - 品牌2026