LeetCode(Hot.2)—— 49.字符異位詞分組題解

Problem: 49. 字母異位詞分組

字母異位詞的定義是:兩個單詞的字母組成一樣,但順序可以不同,比如 eat、tea 和 ate 就是一個組的。

思路

將每個字符串按字母排序,把排序后的字符串作為 key,相同 key 的放在一個 list 中,最終將這些 list 返回。

解題過程

  1. 核心思想:

    ? 字母異位詞排序后是相同的字符串。

    ? 我們可以將每個字符串排序后,作為 map 的 key,原始字符串作為 value。

    ? 如果多個字符串排序后結果一致,說明它們屬于同一個“異位詞”組。

  2. 實現方式:

(1)使用一個 HashMap<String, List>:

  • key:排序后的字符串(唯一標識一組異位詞)。
  • value:原始字符串組成的列表。

(2)遍歷輸入數組 strs:

  • 每個字符串轉為字符數組并排序。
  • 把排序后的字符串作為 key,根據 key 獲取已有的 list,沒有則新建。
  • 把原字符串添加到對應的 list 中。

(3)最后返回 map 中所有的 value(即每組異位詞)。

復雜度

  • 時間復雜度:O(n * k log k)

    • 是字符串個數
    • 是字符串最大長度(每次排序耗時 O(k log k))
  • 空間復雜度:O(n * k)

    • 用于存儲結果列表和中間 map

Code

class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String, List<String>> map = new HashMap<>();for(String str : strs) {// 1. 將每個單詞轉成 char 數組,并且進行排序char[] temp = str.toCharArray();Arrays.sort(temp);String key = new String(temp);// 2. 排序后的值作為 key,原始值作為 List 集合中的 value。相同的 key 存在同一個 List<String> 中List<String> list = map.getOrDefault(key, new ArrayList<>());list.add(str);map.put(key, list);}return new ArrayList<>(map.values());}
}

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

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

相關文章

為什么信號完整性對于高速連接器設計至關重要?

外部連接器通過在各種電子元件和系統之間可靠地傳輸數據而不損失保真度來保持信號完整性。在本文中&#xff0c;我們將討論信號完整性的重要性&#xff0c;回顧高速部署挑戰&#xff0c;并重點介紹各種連接器設計策略&#xff0c;以防止失真和降級。 了解連接器信號完整性挑戰…

得物官網sign簽名逆向分析

打開得物官網&#xff0c;點擊鞋類&#xff0c;可以看到請求 直接搜sign function p(e) {return f()("".concat(e ? s()(e).sort().reduce(function(t, n) {return "".concat(t).concat(n).concat(e[n])}, "") : "", "048a9…

Ubuntu 安裝WPS Office

文章目錄 Ubuntu 安裝WPS Office下載安裝文件安裝WPS問題1.下載缺失字體文件2.安裝缺失字體 Ubuntu 安裝WPS Office 下載安裝文件 需要到 WPS官網 下載最新軟件&#xff0c;比如wps-office_12.1.0.17900_amd64.deb 安裝WPS 執行命令進行安裝 sudo dpkg -i wps-office_12.1…

javaSE.判空包裝類

判空包裝類Optional&#xff0c;這個類可以很有效的處理空指針問題 空指針異常&#x1f447; 特判null&#x1f447; Optional類可以更加優雅地處理這種問題&#x1f447;&#x1f447; ofNullable&#x1f447; isPresent isEmpty &#x1f447; &#x1f447; 包裝之后&…

使用 vcpkg 構建支持 HTTPS 的 libcurl 并解決常見鏈接錯誤

適用環境&#xff1a;Windows 10/11 Visual Studio 2022 CMake ≥ 3.20 目標讀者&#xff1a;希望在 C 項目中輕松調用 HTTPS&#xff08;GET/POST/PUT/DELETE&#xff09;&#xff0c;又被 LNK20xx 鏈接錯誤困擾的開發者 目錄 為什么選 vcpkg 與 libcurl用 vcpkg 安裝帶 SS…

ISO26262-淺談用例導出方法和測試方法

目錄 1 摘要2 測試方法3 測試用例導出方法4 測試方法與用例導出方法的差異和聯系5 結論 1 摘要 ISO26262定義了測試方法和用例導出方法&#xff0c;共同保證產品的開發質量。但在剛開始學習ISO26262的時候&#xff0c;又不是非常清晰地理解它倆的區別和聯系。本文主要對它倆的…

RoBoflow數據集的介紹

https://public.roboflow.com/object-detection&#xff08;該數據集的網址&#xff09; 可以看到一些基本情況 如果我們想要下載&#xff0c;直接點擊 點擊圖像可以看到一些基本情況 可以點擊紅色箭頭所指&#xff0c;右邊是可供選擇的一些yolo模型的格式 如果你想下載…

基于CFSSL構建高可用ETCD集群全指南(含TLS證書管理)

基于CFSSL構建高可用ETCD集群全指南&#xff08;含TLS證書管理&#xff09; 摘要&#xff1a;本文深入講解使用CFSSL工具簽發TLS證書&#xff0c;并部署生產級高可用ETCD集群的完整流程。涵蓋證書全生命周期管理、集群配置優化及安全加固方案&#xff0c;適用于Kubernetes、分…

【設計模式】適配器模式:讓不兼容的接口和諧共處

引言 在軟件開發中&#xff0c;我們經常會遇到這樣的情況&#xff1a;兩個已經存在的接口無法直接協同工作&#xff0c;但我們又希望它們能夠無縫對接。這時&#xff0c;適配器模式就派上用場了。適配器模式&#xff08;Adapter Pattern&#xff09;是一種結構型設計模式&…

doris/clickhouse常用sql

一、doris常用SQL 1、doris統計數據庫的總大小&#xff08;單位&#xff1a;MB&#xff09; SELECT table_schema AS database_name,ROUND(SUM(data_length) / 1024 / 1024, 2) AS database_size_MB FROM information_schema.tables WHERE table_schema NOT IN (information…

軟件架構分層策略對比及Go項目實踐

一、水平分層 vs 功能劃分 vs 組件劃分 維度水平分層功能劃分組件劃分核心思想按垂直層次劃分職責&#xff08;如表示層、業務層、數據層&#xff09;按業務功能模塊劃分&#xff08;如用戶管理、訂單服務、支付模塊&#xff09;按技術或業務能力劃分獨立組件&#xff08;如數…

Linux進程地址空間、寫時拷貝

1.進程地址空間 感知進程地址空間 C/C有內存的概念&#xff0c;內存空間包括棧、堆、代碼段等等&#xff0c;下面是32位下的內存分布圖&#xff0c;自底向上(由0x00000000至0xFFFFFFFF); 下面通過程序來驗證各個數據在該空間的地址&#xff0c;由此感知整個地址空間的分布情…

python成功解決AttributeError: can‘t set attribute ‘lines‘

文章目錄 報錯信息與原因分析解決方法示例代碼代碼解釋總結 報錯信息與原因分析 在使用 matplotlib繪圖時&#xff0c;若嘗試使用 ax.lines []來清除圖表中的線條&#xff0c;會遇到AttributeError: can’t set attribute錯誤。這是因為 ax.lines是一個只讀屬性&#xff0c;不…

從零搭建微服務項目Pro(第6-2章——微服務鑒權模塊SpringSecurity+JWT)

前言&#xff1a; 在上一章已經實現了SpringBoot單服務的鑒權&#xff0c;在導入SpringSecurity的相關依賴,以及使用JWT生成的accessToken和refreshToken能夠實現不同Controller乃至同一Controller中不同接口的權限單獨校驗。上一章鏈接如下&#xff1a; 從零搭建微服務項目Pr…

win安裝軟件

win安裝軟件 jdk安裝 jdk安裝 首先去官網下載適合系統版本的JDK&#xff0c;下載地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html進入下載頁面&#xff0c;如下圖&#xff1a; 首先選擇&#xff1a;Accept License Agreement單選按鈕&…

Prompt-Tuning 提示詞微調

1. Hard Prompt 定義&#xff1a; Hard prompt 是一種更為具體和明確的提示&#xff0c;要求模型按照給定的信息生成精確的結果&#xff0c;通常用于需要模型提供準確答案的任務. 原理&#xff1a; Prompt Tuning原理如下圖所示&#xff1a;凍結主模型全部參數&#xff0c;在…

【Vue生命周期的演變:從Vue 2到Vue 3的深度剖析】

Vue生命周期的演變&#xff1a;從Vue 2到Vue 3的深度剖析 1. 生命周期鉤子的概念與意義 Vue框架通過生命周期鉤子函數使開發者可以在組件不同階段執行自定義邏輯。這些鉤子函數是Vue組件生命周期中的關鍵切入點&#xff0c;對于控制組件行為至關重要。 2. Vue 2中的生命周期…

java ai 圖像處理

Java AI 圖像處理 圖像處理是人工智能&#xff08;AI&#xff09;領域中非常重要的一個應用方向。通過使用Java編程語言和相應的庫&#xff0c;我們可以實現各種圖像處理任務&#xff0c;如圖像識別、圖像分類、圖像分割等。本文將介紹一些常見的圖像處理算法&#xff0c;并通過…

從 0~1 保姆級 詳細版 PostgreSQL 數據庫安裝教程

PostgreSQL數據庫安裝 PostgreSQL官網 【PostgreSQL官網】 | 【PostgreSQL安裝官網_Windows】 安裝步驟 step1&#xff1a; 選擇與電腦相對應的PostgreSQL版本進行下載。 step2&#xff1a; 雙擊打開剛才下載好的文件。 step3&#xff1a; 在彈出的setup窗口中點擊 …

Keil MDK中禁用半主機(No Semihosting)

在 ARM 編譯器&#xff08;如 Keil MDK&#xff09; 中禁用半主機&#xff08;Semihosting&#xff09;并實現標準庫的基本功能&#xff0c;需要以下步驟&#xff1a; 1. 禁用半主機 #pragma import(__use_no_semihosting) // 禁用半主機模式作用&#xff1a;防止標準庫函數&…