LeetCode49.字母異味詞分組

?我一開始的思路就是用1個hashmap<Integer,List<String>>,Integer存的的是字符串所有字母ASCLL值的和,List里面放異位字符串,但是不是異位的字符串的ascll值也可能相同比如acd和abe,所以這個hashmap只能降低一點時間復雜度我還是要寫一個方法來判斷是不是異位字符串,就在我寫的時候我突然意識到,這樣的話hashmap的key會重復啊,我必須得想辦法找到一個key使得異位字符串有相同的key其他沒有。百思不得其解,最后還是點開了題解,剛點開,映入眼簾的”字母排序“四個字讓我恍然大悟,我立馬關掉題解自己寫。

異位字符串把字母排完之后就是一樣的啊,拿這個排完序的字符串作為key就好了啊,最簡單的排序當然是冒泡了,但是我交換兩個字母順序的時候我寫的str.charAt(i)=str.charAt(j),這行代碼有問題,好像不能這樣賦值,只能用雙等號比較,然后就寫了一個很屎的字符串排序,知道通過排序字母就知道如何解題了,以下是我的屎代碼:

class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> ans = new ArrayList<List<String>>();int n = strs.length;HashMap<String,List<String>> map = new HashMap<>();for(int i=0;i<n;i++){String strSort = strSort(strs[i]);if(map.containsKey(strSort)){map.get(strSort).add(strs[i]);}else{List value = new ArrayList<String>();value.add(strs[i]);map.put(strSort,value);}}for (String key:map.keySet()) {ans.add(map.get(key));}return ans;}public String strSort(String str){int n = str.length();char[] c = new char[n];for(int i=0;i<n;i++){c[i] = str.charAt(i);}for(int i=0;i<n;i++){for(int j = i+1;j<n;j++){if(c[i] > c[j]){char tmp = c[i];c[i] = c[j];c[j] = tmp;}}}String s = new String();for(int i=0;i<n;i++){s+=c[i];}return s;}
}

看了下題解的代碼,太牛了,很簡潔,他都沒自己排序

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<String, List<String>>();for (String str : strs) {char[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);List<String> list = map.getOrDefault(key, new ArrayList<String>());list.add(str);map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}

先用toArray()方法把一個字符串變成字符串數組,然后用Arrays.sort()方法把字符串數組排序,然后通過傳入一個字符串數組參數的構造方法創建這個排好了序的字符串,唉,我也是按照這三步寫的,但是tmd我全是自己寫的,這說明我對一些類的常用方法根本不熟悉。后面他沒有進行key的判斷,而是通過調用map.getOrDefault,其實原理一樣,map.getOrDefault也是先看有沒有這個key,有就拿出這個value,沒有就返回設置的默認值,這里的默認值是新建一個list,后面就add,put。

題解還有一種不排序的方法,就是統計字母的頻次,然后把頻次的數字轉成char加起來就是一個String,然后把這個String作為key,例如leetcode的key就是”00113000000100100001000000“,這樣異位字符串的key也是相同的。

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

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

相關文章

Vue--》打造個性化醫療服務的醫院預約系統(六)

今天開始使用 vue3 + ts 搭建一個醫院預約系統的前臺頁面,因為文章會將項目的每一個地方代碼的書寫都會講解到,所以本項目會分成好幾篇文章進行講解,我會在最后一篇文章中會將項目代碼開源到我的GithHub上,大家可以自行去進行下載運行,希望本文章對有幫助的朋友們能多多關…

Web APIs 第六天

正則表達式介紹語法元字符修飾符 一.正則表達式介紹 ① 簡介 用來匹配字符串中字符組合的模式在JavaScript中&#xff0c;正則表達式也是對象通常用來查找&#xff0c;替換那些符合正則表達式的文本&#xff0c;許多語言都支持正則表達式 ② 使用場景 驗證表單&#xff1a…

算法通關村第4關【白銀】| 棧的經典算法問題

1.括號匹配問題 思路&#xff1a;將左括號壓入棧中&#xff0c;遍歷字符串&#xff0c;當遇到右括號就出棧&#xff0c;判斷是否是匹配的一對&#xff0c;不是就返回false&#xff08;因為按照順序所以當遇到右括號出棧一定要是匹配的&#xff09;。使用Map來簡化ifelse clas…

編寫一套工具庫并上傳NPM

你的 工具箱 開箱即可用的 directive\utils&#xff0c; 說明&#xff1a;vue3-directive-tools 是一個方便在 Vue 3 Ts 項目中快速使用的 directive、tool 的 npm 插件。它允許您輕松地在項目中添加多種功能&#xff0c;它采用 Ts 方式開發&#xff0c;與 Vue3 更加搭配 npm&…

系統架構設計師---2017年上午試題1答案詳解

2017年上午試題1答案詳解 某計算機系統采用5級流水線結構執行指令,設每條指令的執行由取指令(2?t)、分析指令(1?t)、取操作數(3?t)、運算(1?t)和寫回結果(2?t)組成,并分別用5個子部完成,該流水線的最大吞吐率為(1);若連續向流水線輸入10條指令,則該流水線的加速比為(…

問道管理:放量打拐什么意思?常見的放量打拐三種形態?

成交量一直是股票交易中比較重要的目標&#xff0c;那么&#xff0c;放量打拐是什么意思&#xff1f;常見的放量打拐三種形狀是什么&#xff1f;下面問道管理為我們預備了相關內容&#xff0c;以供參閱。 放量打拐什么意思&#xff1f; 放量是指股票成交量與前幾個交易日比較顯…

安裝和配置 Ansible

安裝和配置 Ansible 按照下方所述&#xff0c;在控制節點 control.area12.example.com 上安裝和配置 Ansible&#xff1a; 安裝所需的軟件包 創建名為 /home/curtis/ansible/inventory 的靜態清單文件&#xff0c;以滿足以下要求&#xff1a; node1 是 dev 主機組的成員 node2 …

openGauss學習筆記-43 openGauss 高級數據管理-事件觸發器

文章目錄 openGauss學習筆記-43 openGauss 高級數據管理-事件觸發器43.1 語法格式43.2 參數說明43.3 示例 openGauss學習筆記-43 openGauss 高級數據管理-事件觸發器 觸發器會在指定的ddl事件發生時自動執行函數。目前事件觸發器僅在PG兼容模式下可用。 43.1 語法格式 創建事…

獨家!網絡機頂盒哪個好?測評員深度對比盤點網絡機頂盒排名

網絡機頂盒稱得上是家家戶戶必備&#xff0c;每年我都會進行網絡機頂盒的測評&#xff0c;今年已經測評過十幾款了&#xff0c;后臺收到很多私信不知道網絡機頂盒哪個好&#xff0c;我本期整理了網絡機頂盒排名&#xff0c;大家在選購時可以參考&#xff1a; ◆泰捷WEBOX 60Pro…

測試開發面試心得

百度測試開發實習生面試心得&#xff1a; 電話面試&#xff1a; 面試官&#xff1a;首先做一下自我介紹吧 我&#xff1a;我是***&#xff0c;來自什么大學&#xff0c;現在大三&#xff0c;在學校期間擔任過部長&#xff0c;副主席等職務&#xff0c; 組織舉辦了很多比賽&…

Keepalived + Nginx 實現高可用

一、簡介 浮動IP、漂移IP地址又叫做VIP&#xff0c;也就是虛擬IP。 Keepalived 是一種高性能的服務器高可用或熱備解決方案。 Keepalived 可以用來防止服務器單點故障的發生&#xff0c;通過配合 Nginx 可以實現 web 前端服務的高可用。 Keepalived 以 VRRP 協議為實現基礎&a…

使用 spaCy 增強 NLP 管道

介紹 spaCy 是一個用于自然語言處理 (NLP) 的 Python 庫。SpaCy 的 NLP 管道是免費且開源的。開發人員使用它來創建信息提取和自然語言理解系統,例如 Cython。使用該工具進行生產,擁有簡潔且用戶友好的 API。 如果您處理大量文本,您會想了解更多相關信息。例如,它是關于什…

HOT99-下一個排列

leetcode原題鏈接&#xff1a;下一個排列 題目描述 整數數組的一個 排列 就是將其所有成員以序列或線性順序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下這些都可以視作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整數數組的 下一個排列 是指其…

【C++】模板template

&#x1f525;&#x1f525; 歡迎來到小林的博客&#xff01;&#xff01; ??????&#x1f6f0;?博客主頁&#xff1a;??林 子 ??????&#x1f6f0;?博客專欄&#xff1a;?? C ??????&#x1f6f0;?社區 :?? 進步學堂 ??????&#x1f6f0;?歡…

Django之定時任務--apscheduler

Django--定時任務apscheduler的使用 apscheduler定時任務的使用1、安裝包2、配置settings.py3、在manage.py的文件同級目錄下創建文件scheduler.py4、在項目的urls.py中調用這個定時計劃5、然后啟動項目 python manage.py runserver,在admin中查看就能看到你的定時任務及執行的…

機器學習算法之-邏輯回歸(1)

什么是回歸 回歸樹&#xff0c;隨機森林的回歸&#xff0c;無一例外他們都是區別于分類算法們&#xff0c;用來處理和預測連續型標簽的算法。然而邏輯回歸&#xff0c;是一種名為“回歸”的線性分類器&#xff0c;其本質是由線性回歸變化而來的&#xff0c;一種廣泛使用于分類問…

Vue 引入 Element-UI 組件庫

Element-UI 官網地址&#xff1a;https://element.eleme.cn/#/zh-CN 完整引入&#xff1a;會將全部組件打包到項目中&#xff0c;導致項目過大&#xff0c;首次加載時間過長。 下載 Element-UI 一、打開項目&#xff0c;安裝 Element-UI 組件庫。 使用命令&#xff1a; npm …

ArcGIS Maps SDK for JavaScript系列之二:認識Map和MapView

目錄 Map創建一個 Map 對象的示例代碼&#xff1a;Map的常用屬性Map的常用方法 MapViewMapView的常用屬性MapView的常用方法 在 ArcGIS Maps SDK for JavaScript 中&#xff0c;Map 和 MapView 是兩個重要的概念&#xff0c;用于創建和展示地圖應用程序。 Map Map 表示一個地圖…

【Rust】Rust學習 第十三章Rust 中的函數式語言功能:迭代器與閉包

Rust 的設計靈感來源于很多現存的語言和技術。其中一個顯著的影響就是 函數式編程&#xff08;functional programming&#xff09;。函數式編程風格通常包含將函數作為參數值或其他函數的返回值、將函數賦值給變量以供之后執行等等。 更具體的&#xff0c;我們將要涉及&#…

bert,transformer架構圖及面試題

Transformer詳解 - mathor atten之后經過一個全連接層殘差層歸一化 class BertSelfOutput(nn.Module):def __init__(self, config):super().__init__()self.dense nn.Linear(config.hidden_size, config.hidden_size)self.LayerNorm nn.LayerNorm(config.hidden_size, epscon…