LeetCode熱題100精講——Top2:字母異位詞分組【哈希】

在這里插入圖片描述

你好,我是安然無虞。

文章目錄

    • 題目背景
    • 字母異位詞分組
      • C++解法
      • Python解法

在這里插入圖片描述

題目背景

如果大家對于 哈希 類型的概念并不熟悉, 可以先看我之前為此專門寫的算法詳解:
藍橋杯算法競賽系列第九章·巧解哈希題,用這3種數據類型足矣

字母異位詞分組

題目鏈接:字母異位詞分組

在這里插入圖片描述

解題思路:參考:《la bu la dong》

本題也是異位詞相關,異位詞這類問題的關鍵在于,如何迅速判斷兩個字符串是異位詞,主要考察我們數據編碼和 哈希表的使用:

是否可以找到一種編碼方法,使得字母異位詞的編碼都相同?找到這種編碼方式之后,就可以用一個哈希表存儲編碼相同的所有異位詞,得到最終的答案。

242. 有效的字母異位詞 考察了異位詞的編碼問題,對字符串排序可以是一種編碼方案,如果是異位詞,排序后就變成一樣的了,但是這樣時間復雜度略高,且會修改原始數據。更好的編碼方案是利用每個字符的出現次數進行編碼,也就是下面的解法代碼。

代碼詳解:

C++解法

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 建立編碼到分組的映射unordered_map<string, vector<string>> encodeToGroup;// 將相同編碼的字符串放到一個分組中for(auto& str : strs){// 對字符串進行編碼string code = encode(str);// 將相同編碼的字符串放到一起encodeToGroup[code].push_back(str);}// 統計結果vector<vector<string>> res;for(auto& group : encodeToGroup){res.push_back(group.second);}return res;}// 對字符串中字符的出現次數進行編碼string encode(string& s){vector<int> hashNums(26);for(int i = 0; i < s.size(); i++){hashNums[s[i] - 'a']++;}string code(hashNums.begin(), hashNums.end());return code;}
};

Python解法

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:# 建立編碼后的字符串到分組的映射codeToGroup = {}for s in strs:# 將字符串進行編碼code = self.encode(s)# 將相同編碼的字符串放到同一個分組if code not in codeToGroup:codeToGroup[code] = []codeToGroup[code].append(s)# 獲取結果res = []for group in codeToGroup.values():res.append(group)return res def encode(self, s: str) -> str:# 按照字符出現次數進行編碼count = [0] * 26 # 創建了一個長度為 26 的列表,每個元素都初始化為 0. 這個列表用于記錄每個字母(從 'a' 到 'z')在字符串 中出現的次數.for c in s:delta = ord(c) - ord('a') # 獲取字符的 ASCII值count[delta] += 1return str(count)
遇見安然遇見你,不負代碼不負卿。
謝謝老鐵的時間,咱們下篇再見~

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

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

相關文章

基于python+django的圖書借閱網站-圖書借閱管理系統源碼+運行步驟

該系統是基于pythondjango開發的在線圖書借閱管理系統。系統適合場景&#xff1a;大學生、課程作業、系統設計、畢業設計。 演示地址 前臺地址&#xff1a; http://book.gitapp.cn 后臺地址&#xff1a;http://book.gitapp.cn/#/admin 后臺管理帳號&#xff1a; 用戶名&…

uni-app集成保利威直播、點播SDK經驗FQ(二)|小程序直播/APP直播開發適用

通過uniapp集成保利威直播、點播SDK來開發小程序/APP的視頻直播能力&#xff0c;在實際開發中可能會遇到的疑問和解決方案&#xff0c;下篇。更多疑問請咨詢19924784795。 1.ios不能后臺掛起uniapp插件 ios端使用后臺音頻播放和畫中畫功能&#xff0c;沒有在 manifest.json 進…

數據庫三級填空+應用題(1)

填空 35【答案】TOP 3 WITH TIES 【解析】希望選出商品數量最多的前3類商品&#xff0c;并獲得相應的商品類別和數量。with ties一般是和Top 、 order by相結合使用,表示包括與最后一行order by后面的參數取值并列的結果。 36在SQL Server 2008中&#xff0c;每個數據頁可存儲8…

前端(vue)學習筆記(CLASS 5):自定義指令插槽路由

1、自定義指令 內置指令&#xff1a;內部提供的&#xff0c;每個指令都有自己各自獨立的功能 自定義指令&#xff1a;自己定義的指令&#xff0c;可以封裝一些dom操作&#xff0c;擴展額外功能 全局注冊-語法 例如&#xff0c;當頁面加載時&#xff0c;讓元素獲得焦點 Vue.…

【redis】事務詳解,相關命令multi、exec、discard 與 watch 的原理

文章目錄 什么是事務原子性一致性持久性隔離性 優勢與 MySQL 對比用處 事務相關命令開啟事務——MULTI執行事務——EXEC放棄當前事務——DISCARD監控某個 key——WATCH作用場景使用方法實現原理 事務總結 什么是事務 MySQL 事務&#xff1a; 原子性&#xff1a;把多個操作&am…

【Java SE】單例設計模式

參考筆記&#xff1a;深入理解Java設計模式&#xff1a;單例模式及其餓漢式與懶漢式的對比,-CSDN博客 目錄 1.什么是設計模式 2.經典設計模式 3.單例設計模式&#xff08;static屬性/方法經典使用場景 &#xff09; 3.1 餓漢式單例模式 3.2 懶漢式單例模式 4.補充 1.什么…

【day2】數據結構刷題 棧

一 有效的括號 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括號都有一個對應的…

藍橋杯 勁舞團

問題描述 小藍最近迷上了一款名為 “勁舞團” 的游戲。 在游戲中&#xff0c;只要按照給出的鍵位提示依次按出對應的鍵位&#xff0c;游戲人物便可以跟隨節奏跳舞。 對于連續的 K 次正確敲擊&#xff0c;如果任意連續兩次敲擊之間的時間間隔都小于等于 1 秒&#xff08;即 1…

數據庫數值函數詳解

各類資料學習下載合集 ??https://pan.quark.cn/s/8c91ccb5a474?? 數值函數是數據庫中用于處理數值數據的函數,可以用于執行各種數學運算、統計計算等。數值函數在數據分析及處理時非常重要,能夠幫助我們進行數據的聚合、計算和轉換。在本篇博客中,我們將詳細介紹常用的…

關于金融開發領域的一些專業知識總結

目錄 1. 交易生命周期 1.1 證券交易所 1.1.1 交易前 1) 訂單生成&#xff08;Order Generation&#xff09; 2) 訂單管理&#xff08;Order Management&#xff09; 1.1.2 交易執行 3) 交易匹配&#xff08;Trade Matching&#xff09; 1.1.3 交易后 4) 交易確認&…

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3495. Minimum Operations to Make Array Elements Zero 1. 解題思路 這一題的話核心就是統計對任意自然數 n n n&#xff0c;從 1 1 1到 n n n當中所有的數字對…

Vue 3 + TypeScript 實現視頻播放與字幕功能:集成西瓜播放器 XGPlayer

文章目錄 1. 前言&#xff1a;視頻播放器的重要性2. 準備工作2.1 安裝 Vue 3 項目2.2 安裝 XGPlayer 和相關依賴 3. 實現視頻播放3.1 初始化 XGPlayer 4. 添加字幕功能4.1 配置字幕 4.2 字幕文件格式5. 增加交互性完整的代碼&#xff0c;僅供參考6. 總結 在現代 Web 開發中&…

MacOS安裝 nextcloud 的 Virtual File System

需求 在Mac上安裝next cloud實現類似 OneDrive 那樣&#xff0c;文件直接保存在服務器&#xff0c;需要再下載到本地。 方法 在 官網下載Download for desktop&#xff0c;注意要下對版本&#xff0c;千萬別下 Mac OS默認的那個。 安裝了登錄在配置過程中千萬不要設置任何同…

.NET 9 徹底改變了 API 文檔:從 Swashbuckle(Swagger) 到 Scalar

示例代碼下載&#xff1a;https://download.csdn.net/download/hefeng_aspnet/90404652 摘要 API 文檔是現代軟件開發的支柱。隨著 .NET 9 從 Swashbuckle 轉向 Microsoft.AspNetCore.OpenApi&#xff0c;開發人員需要新的策略來保持高效。本文探討了這些變化&#xff0c;并介…

深入剖析Java虛擬機(JVM):從零開始掌握Java核心引擎

&#x1f4cc; 引言&#xff1a;為什么每個Java開發者都要懂JVM&#xff1f; 想象你是一名賽車手&#xff0c;Java是你的賽車&#xff0c;而JVM就是賽車的引擎。 雖然你可以不關心引擎內部構造就能開車&#xff0c;但要想在比賽中獲勝&#xff0c;必須了解引擎如何工作&#…

怎么連接linux服務器的桌面

一、使用 VNC&#xff08;Virtual Network Computing&#xff09; 1. 服務器端配置&#xff08;Ubuntu 22.04 示例&#xff09; # 安裝 VNC 服務器&#xff08;以 TigerVNC 為例&#xff09; sudo apt update sudo apt install tigervnc-standalone-server tigervnc-xorg-ext…

elasticsearch 通用筆記

文章目錄 一、前言二、內容說明1、目錄簡介2、本文例子前提內容 三、操作內容1、設置ES為服務2、查看健康度參數解析 3、索引相關查詢3.1、查詢指定索引內容3.1.1、匹配查詢3.1.2、精確匹配&#xff08;不嘗試分詞&#xff09;3.1.3、范圍查詢3.1.4、id查詢3.1.5、通配符及前綴…

windows安裝配置FFmpeg教程

1.先訪問官網&#xff1a;https://www.gyan.dev/ffmpeg/builds/ 2.選擇安裝包Windows builds from gyan.dev 3. 下滑找到release bulids部分&#xff0c;選擇ffmpeg-7.0.2-essentials_build.zip 4. 然后解壓將bin目錄添加path系統變量&#xff1a;\ffmpeg-7.0.2-essentials_bui…

強大的AI網站推薦(第二集)—— V0.dev

網站&#xff1a;V0.dev 號稱&#xff1a;前端開發神器&#xff0c;專為開發人員和設計師設計&#xff0c;能夠使用 AI 生成 React 代碼 博主評價&#xff1a;生成的UI效果太強大了&#xff0c;適合需要快速創建UI原型的設計師和開發者 推薦指數&#xff1a;&#x1f31f;&…

c#知識點補充4

1.發布者訂閱模式 發布者 訂閱者 倆者直接的關聯使用