【算法】字母異位詞分組

題目:字母異位詞分組

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

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

示例 1:
輸入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:
輸入: strs = [“”]
輸出: [[“”]]

示例 3:
輸入: strs = [“a”]
輸出: [[“a”]]

提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 僅包含小寫字母

題目分析:當我看到這道題的時候,這道題考查的就是找出所有的包含相同字母的單詞(單詞中的字母順序是不固定的)。我有以下幾個疑惑點:

第一、怎么進行比對
舉個例子,比如
輸入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

那怎么拿"eat"去和strs數組中的其他值進行比對,有沒有統一的比對標準,我原先想的是先比較字符串的長度,然后再比較每個字母是否相同,這樣復雜度就一下子上去了。
最后思考的得到的解決方案是:通過先把字符串轉成數組,再進行排序,然后再轉成字符串。如果是字符包含的字母相同,則最后得到轉化之后的字符串都是一樣的,接著再進行比較,這樣復雜度降低了,邏輯更清晰了。

第二、怎么保存相同的字母的字符串
我原先的構想是先聲明一個空數組a,來存儲相同的字母的字符串,然后再聲明一個大的數組A來存儲這個a(會有很多個這樣的a數組)。這樣的話,復雜度一下就上去了。
這一步思考的得到的解決方案是使用map來進行存儲,使用轉化后得到的字符串當做map的key值,value剛開始是一個數組(這個數組的初始化值就是剛剛遍歷到的那個值)。這樣就解決了怎么保存相同的字母的字符串的問題;

那通過解決上面這兩個疑問點,也相當于解答出了這道題;
具體代碼如下:

/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {let strsMap = new Map()for (let str of strs) {// 字符串先轉化成數組,然后對數組進行排序,排序之后,再轉化為字符串。(相同字母組成的字符串最后轉為的字符串都是一樣的值)let switchStr = str.split('').sort().join('');// 這里注意split和join的用法,傳入分割的字符// 如果map中包含轉化后的字符串,則把這個str push到數組中if (strsMap.has(switchStr)) {strsMap.get(switchStr).push(str);} else {// 如果map中不包含轉化后的字符串,則用map.set設置key,value,key值為轉化之后的值,value為初始化的數組strsMap.set(switchStr, [str])}}// 輸出最后得到的數組值return Array.from(strsMap.values())
};

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

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

相關文章

從零開始搭建spring boot多模塊項目

一、搭建父級模塊 1、打開idea,選擇file–new–project 2、選擇Spring Initializr,選擇相關java版本,點擊“Next” 3、填寫父級模塊信息 選擇/填寫group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。點擊“…

【0300】Postgres內核動態哈希表實現機制(1)

相關文章&#xff1a; 【0299】Postgres內核之哈希表&#xff08;Hash Tables&#xff09; 0 概述 在【0299】Postgres內核之哈希表&#xff08;Hash Tables&#xff09;一文中&#xff0c;講解了哈希表的作用、實現、優缺點等特性。本文開始&#xff0c;將詳細分析Postgres內…

MySQL之應用層優化(三)

應用層優化 應用層緩存 2.本地共享內存緩存 這種緩存一般是中等大小(幾個GB)&#xff0c;快速&#xff0c;難以在多臺機器間同步。它們對小型的半靜態位數據比較合適。例如每個州的城市列表&#xff0c;分片數據存儲的分區函數(映射表)&#xff0c;或者使用存活時間(TTL)策略…

記錄一次Chrome瀏覽器自動排序ajax請求的JSON數據問題

文章目錄 1.前言2. 為什么會這樣&#xff1f;3.如何解決&#xff1f; 1.前言 作者作為新人入職的第一天&#xff0c;mentor給了一個維護公司運營平臺的小需求&#xff0c;具體需求是根據運營平臺的某個管理模塊所展示記錄的某些字段對展示記錄做排序。 第一步&#xff1a; myb…

工業觸摸一體機優化MES應用開發流程

工業觸摸一體機在現代工業生產中扮演著至關重要的角色&#xff0c;它集成了智能觸摸屏和工業計算機的功能&#xff0c;廣泛應用于各種生產場景中。而制造執行系統&#xff08;MES&#xff09;作為工業生產管理的重要工具&#xff0c;對于提高生產效率、降低成本、優化資源利用具…

力扣hot100-普通數組

文章目錄 題目&#xff1a;最大子數組和方法1 動態規劃方法2 題目&#xff1a;合并區間題解 題目&#xff1a;最大子數組和 原題鏈接&#xff1a;最大子數組和 方法1 動態規劃 public class T53 {//動態規劃public static int maxSubArray(int[] nums) {if (nums.length 0…

C++基礎知識-編譯相關

記錄C語言相關的基礎知識 1 C源碼到可執行文件的四個階段 預處理(.i)、編譯(.s)、匯編(.obj)、鏈接。 1.1 預處理 預處理階段&#xff0c;主要完成宏替換、文件展開、注釋刪除、條件編譯展開、添加行號和文件名標識&#xff0c;輸出.i/.ii預處理文件。 宏替換&#xff0c;…

【UML用戶指南】-26-對高級行為建模-狀態圖

目錄 1、概念 2、組成結構 3、一般用法 4、常用建模技術 4.1、對反應型對象建模 一個狀態圖顯示了一個狀態機。在為對象的生命期建模中 活動圖展示的是跨過不同的對象從活動到活動的控制流 狀態圖展示的是單個對象內從狀態到狀態的控制流。 在UML中&#xff0c;用狀態圖…

tcpdump命令詳解及使用實例

1、抓所有網卡數據包&#xff0c;保存到指定路徑 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump簡介 tcpdump可以將網絡中傳送的數據包完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾&#xff0c;并提供and、or、not等邏輯語句來去掉無用的信…

【Python】已解決:SyntaxError: positional argument follows keyword argument

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;SyntaxError: positional argument follows keyword argument 一、分析問題背景 在Python編程中&#xff0c;當我們在調用函數時混合使用位置參數&#xff08;p…

RabbitMQ進階篇

文章目錄 發送者的可靠性生產者重試機制實現生產者確認 MQ的可靠性數據持久化交換機持久化隊列持久化消息持久化 Lazy Queue(可配置~)控制臺配置Lazy模式代碼配置Lazy模式更新已有隊列為lazy模式 消費者的可靠性消費者確認機制失敗重試機制失敗處理策略 業務冪等性唯一消息ID業…

西部智慧健身小程序+華為運動健康服務

1、 應用介紹 西部智慧健身小程序為用戶提供一站式全流程科學健身綜合服務。用戶通過登錄微信小程序&#xff0c;可享用健康篩查、運動風險評估、體質檢測評估、運動處方推送、個人運動數據監控與評估等公益服務。 2、 體驗介紹西部智慧健身小程序華為運動健康服務核心體驗如…

idea xml ctrl+/ 注釋格式不對齊

處理前 處理后 解決辦法 取消這兩個勾選

核方法總結(三)———核主成分(kernel PCA)學習筆記

一、核主成分 1.1 和PCA的區別 PCA &#xff08;主成分分析&#xff09;對應一個線性高斯模型&#xff08;參考書的第二章&#xff09;&#xff0c;其基本假設是數據由一個符合正態分布的隱變量通過一個線性映射得到&#xff0c;因此可很好描述符合高斯分布的數據。然而在很多實…

ViewBinding的使用(因為kotlin-android-extensions插件的淘汰)

書籍&#xff1a; 《第一行代碼 Android》第三版 開發環境&#xff1a; Android Studio Jellyfish | 2023.3.1 問題&#xff1a; 3.2.4在Activity中使用Toast章節中使用到了kotlin-android-extensions插件,但是該插件已經淘汰,根據網上了解,目前使用了新的技術VewBinding替…

UE4_材質_材質節點_DepthFade

一、DepthFade參數 DepthFade&#xff08;深度消退&#xff09;表達式用來隱藏半透明對象與不透明對象相交時出現的不美觀接縫。 項目說明屬性消退距離&#xff08;Fade Distance&#xff09;這是應該發生消退的全局空間距離。未連接 FadeDistance&#xff08;FadeDistance&a…

【數據分析“三劍客”】—— Pandas

Pandas Pandas 是基于NumPy的一種工具&#xff0c;該工具是為解決數據分析任務而創建的, Pandas提供了大量能使我們快速便捷地處理數據的函數和方法。Pandas與出色的 Jupyter工具包和其他庫相結合&#xff0c;Python中用于進行數據分析的環境在性能、生產率和協作能力方面都是…

光照老化試驗箱:材料耐久性的“時間加速器”

光照老化試驗箱&#xff1a;材料耐久性的“時間加速器”概述 光照老化試驗箱是一種模擬自然光照條件下材料老化過程的設備&#xff0c;廣泛應用于材料科學領域的耐久性能評估。通過模擬日光中的紫外線、熱輻射等環境因素&#xff0c;加速材料老化過程&#xff0c;以此來驗證材…

redhawk:tech file與lefdef layer name不匹配問題

我正在「拾陸樓」和朋友們討論有趣的話題&#xff0c;你?起來吧&#xff1f; 拾陸樓知識星球入口 一些工藝廠商給的redhawk tech file是加密的&#xff0c;讀完tech file再讀lef/def會報錯&#xff0c;根本不知道問題在哪&#xff0c;他們一般會搭配給一個layer map&#xff…

分解+降維+預測!多重創新!直接寫核心!EMD-KPCA-Transformer多變量時間序列光伏功率預測

分解降維預測&#xff01;多重創新&#xff01;直接寫核心&#xff01;EMD-KPCA-Transformer多變量時間序列光伏功率預測 目錄 分解降維預測&#xff01;多重創新&#xff01;直接寫核心&#xff01;EMD-KPCA-Transformer多變量時間序列光伏功率預測效果一覽基本介紹程序設計參…