100道面試必會算法-31-字母異位詞分組

100道面試必會算法-31-字母異位詞分組

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

字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。

示例 1:

輸入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
輸出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

輸入: strs = [""]
輸出: [[""]]

示例 3:

輸入: strs = ["a"]
輸出: [["a"]]

解題思路

遍歷字符串數組

strs,對每個字符串進行處理:

  • 將字符串轉換為字符數組并進行排序。
  • 將排序后的字符數組轉換為字符串,作為鍵。
  • 將原始字符串作為值,存儲在相應鍵的列表中。

最終將所有的值(即分組好的字母異位詞列表)轉換為 ArrayList 并返回。

代碼

class Solution {// 定義一個方法用于對字符串數組中的字符串進行分組public List<List<String>> groupAnagrams(String[] strs) {// 創建一個新的列表,其中包含根據相同字符組成的字符串對字符串數組進行分組的結果return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str->{// 將字符串轉換為字符數組,并對字符數組進行排序char[] array=str.toCharArray();Arrays.sort(array);return new String(array);})).values());}
}
詳細步驟
  1. 轉換為流

    Arrays.stream(strs)
    

    將字符串數組 strs 轉換為一個流(Stream),以便使用流的操作來處理數據。

  2. 分組操作

    Collectors.groupingBy(str -> {char[] array = str.toCharArray();Arrays.sort(array);return new String(array);
    })
    

    使用 Collectors.groupingBy 將字符串按照排序后的字符數組進行分組。具體步驟如下:

    • 將字符串轉換為字符數組 char[] array = str.toCharArray();
    • 對字符數組進行排序 Arrays.sort(array);
    • 將排序后的字符數組轉換回字符串 return new String(array);,作為分組的鍵。
  3. 轉換為列表

    new ArrayList<>(...values())
    

    最后,將分組后的值(即字母異位詞列表)轉換為 ArrayList,并返回結果。

優點
  • 簡潔性:使用 Java Stream API 和 Collectors 使代碼簡潔明了。
  • 效率:排序操作的時間復雜度為 O(n log n),遍歷和分組操作的時間復雜度為 O(n),總體來說效率較高。
總結

通過對字符串排序并利用 Map 進行分組,巧妙地將字母異位詞歸為一類。最終,使用 Java Stream API 將結果整理為所需的列表形式,代碼簡潔高效,適用于大多數情況下的字母異位詞分組問題。

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

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

相關文章

HQL面試題練習 —— 向用戶推薦好友喜歡的音樂

目錄 1 題目2 建表語句3 題解 題目來源&#xff1a;騰訊。 1 題目 現有三張表分別為&#xff1a; 用戶關注表 t_follow(user_id,follower_id)記錄用戶ID及其關注的人ID&#xff0c;請給用戶1 推薦他關注的用戶喜歡的音樂名稱 ------------------------ | user_id | follower…

六月可以閉眼入的寵物空氣凈化器:希喂、安德邁、霍尼韋爾真實PK

俗話說得好&#xff0c;貓咪一年到頭都在掉毛&#xff0c;仿佛它們是四季常在的"蒲公英"&#xff0c;隨時隨地都在播撒毛發。貓毛不僅遍布它們自己的身體&#xff0c;還可能飄到你的床鋪、沙發、衣物上……面對這樣的狀況&#xff0c;既要應對無處不在的貓毛&#xf…

基于卷積神經網絡(CNN)的垃圾分類模型研究

摘要&#xff1a; 隨著城市化進程的加快&#xff0c;垃圾問題日益嚴重。傳統的垃圾分類方法存在效率低下、準確率不高等問題。本文提出了一種基于卷積神經網絡&#xff08;CNN&#xff09;的垃圾分類模型&#xff0c;該模型能夠自動識別并分類不同類型的垃圾。實驗表明&#xf…

Kruskal算法求最小生成樹

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define MAX 100 #define NO INT_MAX//NO表示沒有邊&#xff0c;相當于INFtypedef struct Graph {int arcnum;int vexnum;char vextex[MAX][20];int martrix[MAX][MA…

什么無線領夾麥克風音質最好?領夾麥克風品牌排行榜前十名推薦

?在當今的數字化浪潮中&#xff0c;個人聲音的傳播和記錄變得尤為重要。無論是會議中心、教室講臺還是戶外探險&#xff0c;無線領夾麥克風以其卓越的便攜性和連接穩定性&#xff0c;成為了人們溝通和表達的首選工具。面對市場上琳瑯滿目的無線麥克風選擇&#xff0c;為了幫助…

【Python】使用 SQLObject orm 庫快速將接口數據存入數據庫

使用 SQLObject orm 庫快速將接口數據存入數據庫 文章目錄 使用 SQLObject orm 庫快速將接口數據存入數據庫背景orm python 版本都有哪些&#xff1f; SQLObject 簡單的使用 背景 因為測試需要&#xff0c;要將百萬條數據接口查詢數據存入數據庫中&#xff0c;為了減少 mysql …

Doris insert into 插入語句執行成功,且select查詢成功,返回結果不報錯,但查不到該插入數據

問題&#xff1a;Doris insert into 正常執行成功&#xff0c;select 查詢也執行成功&#xff0c;但查不到該寫入數據 原因&#xff1a;由于有其他 insert commit 事務待提交且該任務處于鎖的狀態&#xff0c;導致不斷在回滾&#xff0c;進而造成其他的insert into 語句也執行成…

26 - 超過5名學生的課(高頻 SQL 50 題基礎版)

26 - 超過5名學生的課 select class fromCourses group byclass havingcount(*)>5;

Seed-TTS語音編輯有多強?對比實測結果讓你驚嘆!

GLM-4-9B 開源系列模型 前言 就在最近&#xff0c;ByteDance的研究人員最近推出了一系列名為Seed-TTS的大規模自回歸文本轉語音(TTS)模型,能夠合成幾乎與人類語音無法區分的高質量語音。那么Seed-TTS的表現究竟有多強呢?讓我們一起來感受下Seed-TTS帶來的驚喜吧! 介紹Seed-TTS…

Java并發包中的鎖升級

在Java中&#xff0c;特別是ReentrantLock和synchronized關鍵字的實現中&#xff0c;鎖的升級通常涉及到從無鎖狀態到偏向鎖、再升級到輕量級鎖&#xff0c;最后可能升級到重量級鎖的過程。這一系列過程是為了減少鎖帶來的開銷&#xff0c;提高并發效率。 偏向鎖&#xff08;Bi…

如何用手寫代碼實現JavaScript中的reduce函數?

在JavaScript中&#xff0c;Array.prototype.reduce() 是一個內置方法&#xff0c;它遍歷數組中的每個元素&#xff0c;并將它們累積成一個單一的返回值。我們可以自己編寫一個類似的函數來模擬這個過程。 下面是一個簡單的手寫實現例子&#xff1a; function myReduce(arr, …

組裝服務器重裝linux系統【idrac集成戴爾遠程控制卡】

&#x1f341;博主簡介&#xff1a; &#x1f3c5;云計算領域優質創作者 &#x1f3c5;2022年CSDN新星計劃python賽道第一名 &#x1f3c5;2022年CSDN原力計劃優質作者 &#x1f3c5;阿里云ACE認證高級工程師 &#x1f3c5;阿里云開發者社區專…

Vue 跨平臺性能優化十法

Vue.js 開發能夠同時運行在不同平臺&#xff08;如 Web、移動平臺和桌面平臺&#xff09;的應用程序。以下是一些常見的跨平臺解決方案&#xff1a; 1. 使用 Vue.js 官方發布的框架&#xff1a; Vue.js&#xff1a;主要用于 Web 開發。 Vue Native&#xff1a;使用 Vue 語法開…

數據結構 | 超詳細講解七大排序(C語言實現,含動圖,多方法!)

目錄 ?編輯 排序的概念 常見排序算法 ?編輯 1.冒泡排序 &#x1f379;圖解 &#x1f973;代碼實現 &#x1f914;時間復雜度 2.插入排序 &#x1f379;圖解 &#x1f334;深度剖析 &#x1f34e;代碼思路 &#x1f973;代碼實現 &#x1f914;時間復雜度 3.希爾…

2024 年適用于 Linux 的 5 個微軟 Word 替代品

對于那些最近由于隱私問題或其他原因而轉向 Linux 的用戶來說&#xff0c;可能很難替換他們最喜歡的、不在 Linux 操作系統上運行的應用程序。 尋找流行程序的合適替代品可能會成為一項挑戰&#xff0c;而且并不是每個人都準備好花費大量時間來嘗試弄清楚什么可以與他們在 Win…

讀書筆記|《把自己變成稀缺資產》:我們都擁有100分的欲望,卻只有1分的耐心。

哈嘍&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近在讀一本書《把自己變成稀缺資產》&#xff0c;其中一章講到耐心的重要性&#xff0c;很有共鳴。 當今社會&#xff0c;生活節奏越來越快&#xff0c;我們都在急于求成的追求結果&#xff0c;對過程越來越缺乏耐…

C++核心編程友元的應用

文章目錄 1.友元1.什么是友元2.全局函數做友元2.類做友元3.成員函數做友元 1.友元 1.什么是友元 在C中&#xff0c;友元&#xff08;friend&#xff09;是一種允許一個類或函數訪問另一個類的非公有&#xff08;private 或 protected&#xff09;成員的機制。這種機制打破了類…

系統研發安全漏洞

軟件安全漏洞指的是軟件中存在的具體缺陷或疏忽&#xff0c;這些缺陷或疏忽能夠被攻擊者利用并執行一些惡意行為。這些行為包括但不限于泄露或修改敏感信息、干擾或銷毀系統、接管計算機系統或程序權限等。與大眾熟悉的軟件缺陷&#xff08;Bug&#xff09;相比&#xff0c;安全…

Mysql中表的常用約束

在MySQL表中常用的約束有以下幾種&#xff1a; 1. 主鍵約束&#xff08;Primary Key Constraint&#xff09;&#xff1a;用于標識表中的唯一記錄。一個表只能有一個主鍵&#xff0c;主鍵列不能有重復值&#xff0c;也不能為NULL。 2. 唯一約束&#xff08;Unique Constraint…

2024050402-重學 Java 設計模式《實戰責任鏈模式》

重學 Java 設計模式&#xff1a;實戰責任鏈模式「模擬618電商大促期間&#xff0c;項目上線流程多級負責人審批場景」 一、前言 場地和場景的重要性 射擊&#x1f3f9;需要去靶場學習、滑雪&#x1f3c2;需要去雪場體驗、開車&#x1f697;需要能上路實踐&#xff0c;而編程…