力扣每日一題--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
英文地址,請注明出處:http://en.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…