力扣100題---字母異位詞分組

1.字母異位詞分組

給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。

字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。
在這里插入圖片描述

方法一:字母排序

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 處理邊界情況:如果輸入數組為空,直接返回空列表if (strs.length == 0) return new ArrayList<>();// 創建哈希表:鍵為排序后的字符數組(字符串形式),值為該異位詞組對應的字符串列表Map<String, List<String>> map = new HashMap<>();// 遍歷輸入的每個字符串for (String str : strs) {// 將字符串轉換為字符數組,以便進行排序char[] chars = str.toCharArray();// 對字符數組進行排序(例如:"eat" → ['a', 'e', 't'])// 排序后相同異位詞的字符數組順序相同,可作為相同的鍵Arrays.sort(chars);// 將排序后的字符數組轉換為字符串,作為哈希表的鍵// 例如:['a', 'e', 't'] → "aet"String key = String.valueOf(chars);// 檢查哈希表中是否已存在該鍵// 如果不存在,創建一個新的空列表,并與該鍵關聯if (!map.containsKey(key)) {map.put(key, new ArrayList<>());}// 將原始字符串添加到對應鍵的列表中// 例如:"eat" 和 "tea" 都會被添加到鍵 "aet" 對應的列表中map.get(key).add(str);}// 將哈希表中的所有值(列表集合)轉換為一個大列表并返回// 每個子列表包含一組互為異位詞的字符串return new ArrayList<>(map.values());}
}

方法二 字符計數法

在這里插入圖片描述

時間復雜度和空間復雜度

在這里插入圖片描述
在這里插入圖片描述

class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 創建一個哈希表,用于分組異位詞// 鍵:由字母和出現次數組成的字符串(如 "a1b2")// 值:所有符合該模式的字符串列表(如 ["abb", "bab", "bba"])Map<String , List<String>> map =new HashMap<>();// 遍歷輸入的每個字符串for(String str : strs){ // 創建一個長度為26的數組,統計每個字母的出現次數// counts[0] 對應 'a' 的次數,counts[1] 對應 'b' 的次數,依此類推int[] counts =new int[26]; int length =str.length();// 遍歷字符串中的每個字符,統計次數for(int i=0;i<length;i++){// 將字符轉換為數組索引:'a' 變成 0,'b' 變成 1,...,'z' 變成 25// 對應位置的計數加1counts[str.charAt(i)- 'a' ] ++;}StringBuilder sb = new StringBuilder();// 生成用于哈希表的鍵// 按字母順序拼接每個出現過的字母及其次數(如 "a1b2")for(int i= 0 ; i < 26 ; i++ ){if(counts[i]!= 0){// 添加字母(如 'a')sb.append((char)('a'+i));// 添加該字母的出現次數(如 2)sb.append(counts[i]);}}String key = sb.toString();// 將當前字符串添加到對應的分組中// 如果鍵不存在,創建一個新的列表// 如果鍵已存在,獲取已有的列表List<String> list=map.getOrDefault(key,new ArrayList<>());list.add(str);map.put(key,list);}// 返回哈希表中所有的值(即所有分組)return new ArrayList<>(map.values());}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用子查詢在 SQL Server 中進行數據操作

在 SQL Server 中&#xff0c;子查詢&#xff08;Subquery&#xff09;是一種在查詢中嵌套另一個查詢的技術&#xff0c;可以用來執行復雜的查詢、過濾數據或進行數據計算。子查詢通常被用在 SELECT、INSERT、UPDATE 或 DELETE 語句中&#xff0c;可以幫助我們高效地解決問題。…

Flask集成pyotp生成動態口令

Python中的pyotp模塊是一個用于生成和驗證一次性密碼&#xff08;OTP&#xff09;的庫&#xff0c;支持基于時間&#xff08;TOTP&#xff09;和計數器&#xff08;HOTP&#xff09;的兩種主流算法。它遵循RFC 4226&#xff08;HOTP&#xff09;和RFC 6238&#xff08;TOTP&…

觸控精靈 ADB運行模式填寫電腦端IP教程

?ADB模式&#xff0c;如果你手機已經root則可以直接運行&#xff0c;無需安裝電腦端。 ?ADB模式&#xff0c;如果你手機沒有root&#xff0c;那你可以windows電腦下載【極限投屏】軟件&#xff0c;然后你的手機和電腦的網絡要同一個wifi&#xff0c;然后把你電腦的ip地址填寫…

【Python】 -- 趣味代碼 - 佩奇

文章目錄 文章目錄 00 佩奇程序設計框架1. 繪圖設置2. 繪制卡通人物的各個部分3. 主程序總結01 佩奇程序設計00 佩奇程序設計框架 這段代碼使用 turtle 模塊繪制了一個粉色的卡通人物圖像,主要功能包括繪制鼻子、頭、耳朵、眼睛、腮、嘴、身體、手、腳和尾巴等部分。代碼的主…

uniapp-商城-69-shop(2-商品列表,點擊商品展示,商品的詳情, vuex的使用,rich-text使用)

頁面中將我們的數據進行了羅列,對于單個數據的展示,還需要進行開發,這里使用了點擊商品后,進行彈窗展示。 同樣這里用一個組件來進行實現該彈窗的展示。 本文介紹了商品詳情彈窗的實現方案。主要采用Vuex進行狀態管理,通過幾個關鍵組件協同工作: 商品列表組件productItem…

C# Datatable篩選過濾各方式詳解

在C#中&#xff0c;DataTable提供了多種篩選過濾數據的方法&#xff0c;以下是常用的幾種方式及其特點&#xff1a; 1. ?Select方法篩選? 這是最基礎的篩選方式&#xff0c;支持類似SQL的表達式語法 // 單條件篩選 DataRow[] rows dt.Select("Age > 25");// …

計算機網絡中的路由算法:互聯網的“路徑規劃師”

計算機網絡中的路由算法&#xff1a;互聯網的“路徑規劃師” 當你打開瀏覽器&#xff0c;輸入 www.example.com 并敲下回車&#xff0c;數據會從你的電腦出發&#xff0c;穿越一個個路由器&#xff0c;最終抵達目標服務器。這一路上&#xff0c;數據包是怎么知道該走哪條路的&…

硬件工程師筆記——三極管Multisim電路仿真實驗匯總

目錄 1 三極管基礎 更多電子器件基礎知識匯總鏈接 1.1 工作原理 NPN型三極管的工作原理 PNP型三極管的工作原理 1.2 三極管的特性曲線 輸入特性曲線 理想和現實輸出特性 三極管的主要參數包括&#xff1a; 2 三極管伏安特性 2.1 伏安特性仿真 Multisim使用說明鏈接…

Linux 進階命令篇

一、Linux 系統軟件安裝命令 &#xff08;一&#xff09;Ubuntu 系統&#xff08;基于 Debian&#xff09; apt &#xff1a;是 Ubuntu 系統中常用的包管理工具&#xff0c;可以自動處理軟件依賴關系。 安裝命令格式 &#xff1a;sudo apt install 軟件名 示例 &#xff1a;…

LVS-DR 負載均衡群集

目錄 一、LVS-DR集群 1、LVS-DR 工作原理 2、數據包流向分析 3、LVS-DR 模式特點 二、直接路由模式&#xff08;LVS-DR&#xff09; 1、準備案例環境 2、配置負載調度器&#xff08;101&#xff09; &#xff08;1&#xff09;配置虛擬IP 地址&#xff08;VIP&#xff…

提升 GitHub Stats 的 6 個關鍵策略

哈哈&#xff0c;GitHub 的 “B-” 評級 其實是個玄學問題&#xff0c;但確實有一些 快速提升的技巧&#xff01;你的數據看起來 提交數&#xff08;147&#xff09;和 PR&#xff08;9&#xff09;不算少&#xff0c;但 Stars&#xff08;21&#xff09;和貢獻項目數&#xff…

常見的垃圾回收算法原理及其模擬實現

1.標記 - 清除&#xff08;Mark - Sweep&#xff09;算法&#xff1a; 這是一種基礎的垃圾回收算法。首先標記所有可達的對象&#xff0c;然后清除未被標記的對象。 缺點是會產生內存碎片。 原理&#xff1a; 如下圖分配一段內存&#xff0c;假設已經存儲上數據了 標記所有…

卷積神經網絡(CNN):原理、架構與實戰

卷積神經網絡&#xff08;CNN&#xff09;&#xff1a;原理、架構與實戰 卷積神經網絡&#xff08;Convolutional Neural Network, CNN&#xff09;是深度學習領域的一項重要突破&#xff0c;特別擅長處理具有網格結構的數據&#xff0c;如圖像、音頻和視頻。自 2012 年 AlexN…

RabbitMQ 集群與高可用方案設計(二)

三、為什么需要集群與高可用方案 &#xff08;一&#xff09;業務需求驅動 隨著業務的快速發展和用戶量的急劇增長&#xff0c;系統面臨的挑戰也日益嚴峻。在這種情況下&#xff0c;對消息隊列的可靠性、吞吐量和負載均衡能力提出了更高的要求&#xff0c;而單機部署的 Rabbi…

《ChatGPT o3抗命:AI失控警鐘還是成長陣痛?》

ChatGPT o3 “抗命” 事件起底 在人工智能的飛速發展進程中&#xff0c;OpenAI 于 2025 年推出的 ChatGPT o3 推理模型&#xff0c;猶如一顆重磅炸彈投入了技術的海洋&#xff0c;激起千層浪。它被視為 “推理模型” 系列的巔峰之作&#xff0c;承載著賦予 ChatGPT 更強大問題解…

RK3568DAYU開發板-平臺驅動開發:I2C驅動(原理、源碼、案例分析)

1、程序介紹 本程序是基于OpenHarmony標準系統編寫的平臺驅動案例&#xff1a;I2C 系統版本:openharmony5.0.0 開發板:dayu200 編譯環境:ubuntu22 部署路徑&#xff1a; //sample/04_platform_i2c 2、基礎知識 2.1、I2C簡介 I2C&#xff08;Inter Integrated Circuit&a…

在UniApp中開發微信小程序實現圖片、音頻和視頻下載功能

隨著微信小程序的迅猛發展&#xff0c;越來越多的開發者選擇通過UniApp框架來進行跨平臺應用開發。UniApp能夠讓開發者在一個代碼庫中同時發布iOS、Android和小程序等多平臺應用。而在實際開發過程中&#xff0c;很多應用都需要實現一些常見的下載功能&#xff0c;例如圖片、音…

鴻蒙5.0項目開發——接入有道大模型翻譯

鴻蒙5.0項目開發——接入有道大模型翻譯 【高心星出品】 項目效果圖 項目功能 文本翻譯功能 支持文本輸入和翻譯結果顯示 使用有道翻譯API進行翻譯 支持自動檢測語言&#xff08;auto&#xff09; 支持雙向翻譯&#xff08;源語言和目標語言可互換&#xff09; 文本操作…

Vim 中設置插入模式下輸入中文

在 Vim 中設置插入模式下輸入中文需要配置輸入法切換和 Vim 的相關設置。以下是詳細步驟&#xff1a; 1. 確保系統已安裝中文輸入法 在 Linux 系統中&#xff0c;常用的中文輸入法有&#xff1a; IBus&#xff08;推薦&#xff09;&#xff1a;支持拼音、五筆等Fcitx&#xf…

湖北理元理律師事務所:債務優化中的“生活錨點”設計

在債務重組領域&#xff0c;一個常被忽視的核心矛盾是&#xff1a;還款能力與生存需求的沖突。過度壓縮生活支出還債&#xff0c;可能導致收入中斷&#xff1b;放任債務膨脹&#xff0c;又加劇精神壓力。湖北理元理律師事務所通過“三步平衡法”&#xff0c;嘗試在法理框架內破…