力扣每日一题--2025.7.15

📚 力扣每日一题–2025.7.15

3135. 有效单词 (简单)

大家好!今天我们要来聊聊一道有趣的编程题——有效单词

📝 题目描述

在这里插入图片描述

题目分析 📚

题目要求我们判断一个字符串是否为有效单词。有效单词需要满足以下几个条件:

  • 至少包含 3 个字符。
  • 由数字 0-9 和英文大小写字母组成。(不必包含所有这类字符,也就是可以全部是英文字母,不包括数字也可以)
  • 至少包含一个元音字母。
  • 至少包含一个辅音字母。

注意事项 📝

  • 'a''e''i''o''u' 及其大写形式都属于元音字母。
  • 英文中的辅音字母是指那些除元音字母之外的字母。

解题思路 🧠

要解决这个问题,我们需要检查字符串是否满足上述所有条件。我们可以使用布尔变量来记录是否包含元音字母和辅音字母,同时检查字符串长度和字符合法性。

方法一:布尔变量记录 📝

我们可以使用布尔变量来记录是否包含元音字母和辅音字母,同时检查字符串长度和字符合法性。

步骤 🚀
  1. 检查字符串长度是否大于等于 3。
  2. 遍历字符串中的每个字符,检查是否为数字或字母。
  3. 使用布尔变量记录是否包含元音字母和辅音字母。
  4. 最后检查布尔变量是否都为 true
代码实现 💻
class Solution {public boolean isValid(String word) {// 检查字符串长度是否大于等于 3if (word.length() < 3) {return false;}boolean hasVowel = false;boolean hasConsonant = false;for (char c : word.toCharArray()) {if (!Character.isDigit(c) && !Character.isLetter(c)) {// 如果包含非法字符,直接返回 falsereturn false;}if (isVowel(c)) {hasVowel = true;} else if (Character.isLetter(c)) {hasConsonant = true;}}// 检查是否至少包含一个元音字母和一个辅音字母return hasVowel && hasConsonant;}private boolean isVowel(char c) {return "AEIOUaeiou".indexOf(c) >= 0;}
}

方法二:使用 Map 记录 📊

我们也可以使用 Map 来记录字符的分类计数,然后检查 Map 中的计数是否满足条件。

步骤 🚀
  1. 检查字符串长度是否大于等于 3。
  2. 使用三个 Map 分别存储元音字母、辅音字母和数字的计数。
  3. 遍历字符串中的每个字符,根据字符类型将其存储在相应的 Map 中。
  4. 检查 Map 中的计数是否满足条件。
代码实现 💻
import java.util.HashMap;
import java.util.Map;class Solution {public boolean isValid(String word) {// 检查字符串长度是否大于等于 3if (word.length() < 3) {return false;}// 使用 Map 来存储字符的分类计数Map<Character, Integer> vowelCount = new HashMap<>();Map<Character, Integer> consonantCount = new HashMap<>();Map<Character, Integer> digitCount = new HashMap<>();for (char c : word.toCharArray()) {if (Character.isDigit(c)) {digitCount.put(c, digitCount.getOrDefault(c, 0) + 1);} else if (isVowel(c)) {vowelCount.put(c, vowelCount.getOrDefault(c, 0) + 1);} else if (Character.isLetter(c)) {consonantCount.put(c, consonantCount.getOrDefault(c, 0) + 1);} else {// 如果包含非法字符,直接返回 falsereturn false;}}// 检查是否至少包含一个元音字母和一个辅音字母return !vowelCount.isEmpty() && !consonantCount.isEmpty();}private boolean isVowel(char c) {return "AEIOUaeiou".indexOf(c) >= 0;}
}

方法三:正则表达式匹配 🧩

使用正则表达式可以将所有条件检查合并为一个简洁的模式匹配操作,使代码更加紧凑。

步骤 🚀
  1. 检查字符串长度是否大于等于 3。
  2. 使用正则表达式同时验证:
    • 只包含字母和数字
    • 至少包含一个元音字母
    • 至少包含一个辅音字母
代码实现 💻
import java.util.regex.Pattern;
import java.util.regex.Matcher;class Solution {private static final Pattern PATTERN = Pattern.compile("^(?=.*[AEIOUaeiou])" +  // 至少一个元音"(?=.*[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ])" +  // 至少一个辅音"[a-zA-Z0-9]{3,}$");public boolean isValid(String word) {// 使用正则表达式进行所有条件的匹配Matcher matcher = PATTERN.matcher(word);return matcher.matches();}
}

方法四:哈希集合优化元音查找 ⚡

提前定义元音集合,使用哈希表的 O(1) 查找效率来优化元音判断,比字符串的 indexOf 方法更高效。

步骤 🚀
  1. 检查字符串长度是否大于等于 3。
  2. 使用哈希集合存储所有元音字母,实现 O(1) 时间复杂度的查找。
  3. 遍历字符串检查字符合法性,并记录是否包含元音和辅音。
代码实现 💻
import java.util.HashSet;
import java.util.Set;class Solution {// 提前定义元音集合,使用静态初始化提高效率private static final Set<Character> VOWELS = new HashSet<>();static {VOWELS.add('a'); VOWELS.add('e'); VOWELS.add('i'); VOWELS.add('o'); VOWELS.add('u');VOWELS.add('A'); VOWELS.add('E'); VOWELS.add('I'); VOWELS.add('O'); VOWELS.add('U');}public boolean isValid(String word) {if (word.length() < 3) {return false;}boolean hasVowel = false;boolean hasConsonant = false;for (char c : word.toCharArray()) {if (!Character.isLetterOrDigit(c)) {return false;}if (VOWELS.contains(c)) {hasVowel = true;} else if (Character.isLetter(c)) {hasConsonant = true;}}return hasVowel && hasConsonant;}
}

示例表格 📊

让我们来看一些示例:

输入字符串输出结果说明
“abc”true包含元音 a 和辅音 b、c
“ab”false长度不足 3 个字符
“a1b”true包含元音 a、辅音 b 和数字 1
“A1”false长度不足且缺少辅音
“a!b”false包含非法字符"!"
“xyz”false只包含辅音,缺少元音
“AEiou”false只包含元音,缺少辅音
“123abc”true包含数字、元音 a 和辅音 b、c

复杂度分析 ⚡

方法一:布尔变量记录
  • 时间复杂度:O(n),其中 n 是字符串的长度。我们只需遍历一次字符串。
  • 空间复杂度:O(1),只使用了固定数量的额外变量。
方法二:使用 Map 记录
  • 时间复杂度:O(n),同样只需遍历一次字符串。
  • 空间复杂度:O(k),其中 k 是不同字符的数量,最坏情况下为 O(n)。
方法三:正则表达式匹配
  • 时间复杂度:O(n),正则表达式匹配需要遍历整个字符串。
  • 空间复杂度:O(1),只使用了固定的模式对象。
方法四:哈希集合优化
  • 时间复杂度:O(n),只需遍历一次字符串。
  • 空间复杂度:O(1),元音集合大小固定为常数。

拓展思考 💡

这个问题看似简单,但在实际开发中却有很多应用场景,例如:

  1. 密码强度验证(可作为密码规则之一)
  2. 表单输入验证
  3. 文本内容过滤

课后练习 📝

尝试实现一个函数,不仅判断是否为有效单词,还能返回具体的错误原因,例如:

  • 长度不足
  • 包含非法字符
  • 缺少元音
  • 缺少辅音

这样的函数在实际开发中更具实用价值!

希望今天的讲解对你有所帮助,我们明天再见!👋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89480.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql数据库——增删改查CRUD

文章目录一、数据库的基础命令二、创建表三、增(create)四、查询&#xff08;retrieve)五、条件查询&#xff08;where&#xff09;六、修改&#xff08;update&#xff09;七、删除&#xff08;delete&#xff09;一、数据库的基础命令 1.使用客户端连接服务器 mysql -u root…

关于pytorch虚拟环境及具体bug问题修改

本篇博客包含对于虚拟环境概念的讲解和代码实现过程中相关bug的解决关于虚拟环境我的pytorch虚拟环境在D盘&#xff0c;相应python解释器也在D盘&#xff08;一起&#xff09;&#xff0c;但是我的pycharm中的项目在C盘&#xff0c;使用的是pytorch的虚拟环境&#xff0c;这是为…

U盘量产工具与性能优化完全指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;U盘量产工具是IT行业中的专业软件&#xff0c;用于批量生产或修复U盘。安国和银灿是两个提供U盘量产工具的主控芯片制造商&#xff0c;提供初始化、格式化、分区管理、性能优化、故障修复、个性化定制、固件升级…

Golang http开发实战:构建RESTful API保姆级教程

目录 章节1:RESTful API的精髓与Go的Web开发哲学 RESTful API的设计原则 Go的http包核心组件 实战:第一个RESTful API端点 章节2:设计优雅的RESTful路由 路由设计的注意事项 使用Gorilla Mux实现动态路由 章节3:请求与响应的艺术:解析与格式化 解析请求数据 统一…

UGUI 性能优化系列:第一篇——基础优化与资源管理

UGUI 性能优化系列&#xff1a;第一篇——基础优化与资源管理 UGUI 性能优化系列&#xff1a;第二篇——Canvas 与 UI 元素管理 在 Unity 游戏中&#xff0c;用户界面&#xff08;UI&#xff09;是玩家与游戏交互的核心。然而&#xff0c;不当的 UGUI 使用常常成为游戏性能的…

多端协同的招聘系统源码开发指南:小程序+APP一体化设计

当下&#xff0c;很多企业选择搭建属于自己的多端协同招聘平台&#xff0c;尤其是中大型人力资源公司、连锁品牌企业&#xff0c;以及同城服务平台&#xff0c;更是将“小程序APP”一体化招聘系统视为提升效率、降低用工成本的利器。 今天&#xff0c;笔者将从源码开发的角度&a…

Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本

Maven 配置文件核心配置&#xff1a;本地仓库、镜像与 JDK 版本 在 Maven 项目开发中&#xff0c;合理配置 settings.xml 文件能显著提升依赖管理效率。本文将聚焦本地仓库、镜像加速和 JDK 版本这三个核心配置&#xff0c;结合 IDEA 环境详细讲解配置方法与作用。 一、Maven 配…

【时时三省】(C语言基础)通过指针引用字符串

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省如在printf函数中输出一个字符串。这些字符串都是以直接形式&#xff08;字面形式&#xff09;给出的&#xff0c;在一对双撇号中包含若干个合法的字符。使用字符串的更加灵活方便的方法——通…

【Linux驱动-快速回顾】一文快速理解GIC内部寄存器对中断的控制

第一部分&#xff1a;GIC的功能和组成 1. GIC要解决的根本问题 在一个复杂的片上系统&#xff08;SoC&#xff09;中&#xff0c;有非常多的硬件模块&#xff08;如定时器、串口、按键、DMA等&#xff09;&#xff0c;它们都需要在完成任务或遇到特定事件时通知CPU。同时&#…

【IoTDB 线上小课 17】开源 ≠ 免费,3 分钟总结开源商用指南

【IoTDB 视频小课】第十七期&#xff0c;解答你最关心的开源商业使用问题&#xff01;关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源...一个问题重点&#xff0c;3-5 分钟&#xff0c;我们讲给你听&#xff1a;原来开源商业化有这么多规则开…

VUE项目学习笔记 v-for绑定数据,该数据异步获取,同时需要对v-for的DOM节点进行js操作

问题描述&#xff1a;项目里有一个轮播图&#xff0c;轮播图的图片数据从服务器获取&#xff0c;用v-for生成DOM在页面中显示&#xff0c;轮播图插件会通过new Swiper给DOM添加CSS、事件等&#xff0c;实现轮播效果。在这里存在操作顺序问题&#xff1a;当服务器返回图片数据后…

Science | 如何利用“T细胞+组蛋白乙酰化”两大国自然热点?T细胞耗竭机制与代谢-表观遗传调控的新范式

CD8⁺T细胞耗竭&#xff08;T cell exhaustion&#xff09;是肿瘤免疫治疗的核心瓶颈&#xff0c;其表观遗传重塑机制&#xff08;如组蛋白修饰&#xff09;是当前国自然重点资助的前沿方向。耗竭T细胞&#xff08;TEX&#xff09;是指在慢性感染&#xff08;如持续性病毒感染&…

Logback 配置的利器:深入理解<property>与<variable>

在构建现代 Java 应用程序时&#xff0c;日志是不可或缺的一部分。一个健壮的日志系统不仅能帮助我们监控应用程序的运行状态&#xff0c;还能在问题发生时提供关键的诊断信息。Logback 作为 SLF4J 的一个流行实现&#xff0c;以其高性能和灵活的配置而广受开发者喜爱。 然而&a…

Java中excel字典转换

✅ 背景说明EasyExcel 原生的 ExcelProperty 注解不支持 dictType&#xff08;不像那样有 Excel(dictType"xxx")&#xff09;&#xff0c;所以如果你想实现字典翻译功能&#xff0c;就需要自己实现 Converter 接口&#xff0c;比如 DictConvert。✅ 什么是 DictConve…

数据结构-3(双向链表、循环链表、栈、队列)

一、思维导图二、双向循环链表的判空、尾插、遍历(反向)、尾删class Node:def __init__(self, data):self.data dataself.next Noneself.prior Noneclass circularDoublyLinkedList():def __init__(self):self.head Noneself.tail Noneself.size 0def isEmpty(self):retu…

IDEA运行Tomcat一直提示端口被占用(也查不到该端口)

首先查看是否是因为Java程序异常终止&#xff0c;进程没有完全释放导致。打开资源管理器&#xff0c;找到所有的java.exe&#xff0c;强制结束任务。如果仍然不行&#xff0c;那就极可能还是开启了hyper-V虚拟化&#xff0c;查看排除的tcp端口范围端口号没被占用却提示占用&…

AWS Lambda 最佳实践:构建高效无服务器应用的完整指南

引言 AWS Lambda 作为无服务器计算的核心服务,让开发者能够专注于业务逻辑而无需管理服务器。本文将通过实际案例和代码示例,分享 Lambda 开发中的关键最佳实践。 1. 函数设计原则 单一职责原则 每个 Lambda 函数应该只做一件事,这样更容易测试、维护和扩展。 # ❌ 不推…

29、鸿蒙Harmony Next开发:深浅色适配和应用主题换肤

目录 应用深浅色适配 应用跟随系统的深浅色模式 应用主动设置深浅色模式 系统默认判断规则 使用建议与限制 设置应用内主题换肤 概述 自定义主题色 设置应用内组件自定义主题色 设置应用局部页面自定义主题风格 设置应用页面局部深浅色 系统缺省token色值 应用深浅…

源鉴SCA4.9︱多模态SCA引擎重磅升级,开源风险深度治理能力再次进阶

SCA技术已成为数字供应链开源治理的关键入口。源鉴SCA深度融合悬镜原创专利级AI智能代码疫苗技术&#xff0c;是国内首款集源码组件成分分析、代码成分溯源分析、制品成分二进制分析、容器镜像成分扫描、运行时成分动态追踪及开源供应链安全情报预警分析等六大核心引擎为一体的…

Git语义化提交规范及提交模板设置

Git语义化提交规范&#xff08;Conventional Commits&#xff09; &#x1f4da; 常见的语义化提交类型包括&#xff1a;类型含义说明feat✨ 新增功能&#xff08;feature&#xff09;fix&#x1f41b; 修复 bugdocs&#x1f4da; 修改文档&#xff08;如 README&#xff09;st…