字典應用: 客製化字串排序 Custom Sort String_Leetcode #791

閱讀時間約 6 分鐘

題目敘述

題目會給定我們兩個字串。

第一個是指定順序的字串order
第二個是輸入字串s


要求我們依據order給定的順序,重新排列s
如果出現order中沒有出現的字母,任意位置皆可

合法答案可能不只一組,輸出其中一種即可


題目的原文敘述


測試範例

Example 1:

Input:  order = "cba", s = "abcd"

Output:  "cbad"

Explanation: "a""b""c" appear in order, so the order of "a""b""c" should be "c""b", and "a".

Since "d" does not appear in order, it can be at any position in the returned string. "dcba""cdba""cbda" are also valid outputs.


Example 2:

Input:  order = "bcafg", s = "abcd"

Output:  "bcad"

Explanation: The characters "b""c", and "a" from order dictate the order for the characters in s. The character "d" in s does not appear in order, so its position is flexible.

Following the order of appearance in order"b""c", and "a" from s should be arranged as "b""c""a""d" can be placed at any position since it's not in order. The output "bcad" correctly follows this rule. Other arrangements like "bacd" or "bcda" would also be valid, as long as "b""c""a" maintain their order.


約束條件

Constraints:

  • 1 <= order.length <= 26

字串order的長度介於1~26之間。

  • 1 <= s.length <= 200

字串s的長度介於1~200之間。

  • order and s consist of lowercase English letters.

字串order 和 字串s都只會有小寫英文字母。

  • All the characters of order are unique.

order內部的字元都是獨一無二的,不會重複。


演算法 字典 + 重新串接英文字母


先針對s建造一個字典統計字串s每個英文字母的出現次數

接著,依據order給定的順序,和剛剛得到s的英文字母的出現次數,
重新串接每個英文字母

接著,針對沒有定義到,也就是order以外的英文子母,重新串接到輸出結果的尾端


程式碼 字典 + 重新串接英文字母

class Solution:
def customSortString(self, order: str, s: str) -> str:

result = ""

## Dictionary
# key: lowercase English letters
# value: occurrence
occ = Counter(s)

# Rearrange letters with the given order
for char in order:
if char in occ:
result += char * occ[char]
del occ[char]

# Padding remainging letters outside order
for char, count in occ.items():
result += char * count

return result

複雜度分析 字典 + 重新串接英文字母

時間複雜度:

依序掃描字串s和字串order,所需時間為O(s) + O( order )


空間複雜度:

建立一個字典,所需空間為O(26) = O(1),因為題目以定義字串內都是小寫英文字母,本題可視為使用常數空間。


關鍵知識點


依據order給定的順序,和剛剛得到s的英文字母的出現次數,重新串接每個英文字母

需要s的英文字母的出現次數最為輔助資訊,聯想到python dictionary
(字典,相當於資料結構裡的雜湊映射表)。


Reference:

[1] Custom Sort String - LeetCode

avatar-img
88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
題目敘述 題目會給定一棵二元樹的根結點,要求我們找出這棵二元樹最後一層最左邊的值。 題目的原文敘述 測試範例 Example 1: Input: root = [2,1,3] Output: 1 Example 2: Input: root = [1,2,3,4,null,5,6
題目敘述 題目會給定一個參數n代表人口總數,和對應的信任關係陣列trust,陣列元素都是pair都以,[a, b]的形式呈現,代表a信任b。 要求我們找出法官是誰,返回法官的ID? 成為法官的條件: 1.每個人(除了法官自己之外)都信任法官。 2.法官不信任別人。 題目的原文敘述
題目敘述 題目會給我們一個大樓陣列heights,裡面分別記錄每一棟大樓的高度。還有參數bricks代表可用的磚塊數目,和 ladders代表可用的伸縮爬梯數目。 一開始從最左邊的大樓頂樓開始出發。 假如下一棟比現在這棟大樓還矮,或者一樣高,則我們可以直接抵達下一棟。 假如下一棟比現在
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
題目敘述 題目會給定我們輸入邊長陣列nums,請問我們從裡面能夠建構出來的多邊形的最大周長是多少? 如果無解,返回-1 題目的原文敘述 約束條件 Constraints: 3 <= n <= 10^5 輸入陣列長度nums介於3 ~ 十萬 之間。 1 <= nums[i] <=
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
題目敘述 題目會給定一棵二元樹的根結點,要求我們找出這棵二元樹最後一層最左邊的值。 題目的原文敘述 測試範例 Example 1: Input: root = [2,1,3] Output: 1 Example 2: Input: root = [1,2,3,4,null,5,6
題目敘述 題目會給定一個參數n代表人口總數,和對應的信任關係陣列trust,陣列元素都是pair都以,[a, b]的形式呈現,代表a信任b。 要求我們找出法官是誰,返回法官的ID? 成為法官的條件: 1.每個人(除了法官自己之外)都信任法官。 2.法官不信任別人。 題目的原文敘述
題目敘述 題目會給我們一個大樓陣列heights,裡面分別記錄每一棟大樓的高度。還有參數bricks代表可用的磚塊數目,和 ladders代表可用的伸縮爬梯數目。 一開始從最左邊的大樓頂樓開始出發。 假如下一棟比現在這棟大樓還矮,或者一樣高,則我們可以直接抵達下一棟。 假如下一棟比現在
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
題目敘述 題目會給定我們輸入邊長陣列nums,請問我們從裡面能夠建構出來的多邊形的最大周長是多少? 如果無解,返回-1 題目的原文敘述 約束條件 Constraints: 3 <= n <= 10^5 輸入陣列長度nums介於3 ~ 十萬 之間。 1 <= nums[i] <=
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這是本有意思的書,主題頗不尋常,講的是編字典的人。 對現代人來,字典是稀鬆平常的東西,尤其網路很方便,所謂字典,不過是游標固定在字上面就會自動跳出來的東西,遇到不認識的字,手機拍一下也能辨識,一切都那麼自然。 但其實一點也不自然,畢竟文字本身就是理性運作之下產出的東西,來源則是同樣由理性運作構成的語
Thumbnail
從9月30日起,在Naver、Kakao國(韓)語詞典中搜尋「초딩(初丁)」、「말라깽이(瘦皮猴)」、「계집(娘們)」、「머슴애(小廝)」等詞彙,都會同時標注詞彙的使用警示標語,響應韓國網路自律協會(KISO)的「認識歧視用詞」Campaign。
Thumbnail
記得從高中的階段開始,英文老師就會開始建議我們使用 "英英字典" 取代 "英漢字典" ,英文才能更進步,並逐漸練習用英文去思考。可是…… 因為,我們查一個簡單的單字,有可能在英文解釋裡面,卻用了更難更深的單字去解釋它!有時,為了查一個單字,變成要查15個單字!
Thumbnail
以前青茶在國外念書時,國外老師一直要求我們要用英文字典,當時旁邊的同學用中文小聲的說,用英漢字典都有障礙了,怎麼可能用英英字典嘛!我馬上青茶就回了一個遇見知音的眼神,當時年少輕狂的我 覺得用中文翻譯懂意思就是學習語言。本集就是告訴大家為什麼要使用原文字典,以及該如何著手。 00:00 開場
靜處一角落的妳 總是無言 但 我開門妳恆迎等著 當疑問人生難題 妳敞開雙臂擁我入懷 於妳浩瀚無涯愛情裡 任我挑弄尋戲 默默底 妳回應了我的饑渴
Thumbnail
其實也不能怪字典,full circle moment [fʊlˈsɜrkəlˈmoʊmənt] 這句話奧義頗深,解釋完可以耗掉一篇文章。你可能立刻想到這句英文是「圓滿的時刻」,但它的用法可沒我們中文腦想的這麼簡單呢。
Thumbnail
其實都不用買。沒有任何推薦。什麼時代了,還買字典。 上述這段話,是給有網路的人看的。至於針對沒有網路,又怕她一拿起手機就打手遊的小屁孩,我推薦朗文字典(沒有置入,也沒有廠商贊助,純推廣~)一本800左右,用一輩子。划算。 電子字典,不推。翻譯機,不推。還有什麼?大家一起上,開放問答~
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這是本有意思的書,主題頗不尋常,講的是編字典的人。 對現代人來,字典是稀鬆平常的東西,尤其網路很方便,所謂字典,不過是游標固定在字上面就會自動跳出來的東西,遇到不認識的字,手機拍一下也能辨識,一切都那麼自然。 但其實一點也不自然,畢竟文字本身就是理性運作之下產出的東西,來源則是同樣由理性運作構成的語
Thumbnail
從9月30日起,在Naver、Kakao國(韓)語詞典中搜尋「초딩(初丁)」、「말라깽이(瘦皮猴)」、「계집(娘們)」、「머슴애(小廝)」等詞彙,都會同時標注詞彙的使用警示標語,響應韓國網路自律協會(KISO)的「認識歧視用詞」Campaign。
Thumbnail
記得從高中的階段開始,英文老師就會開始建議我們使用 "英英字典" 取代 "英漢字典" ,英文才能更進步,並逐漸練習用英文去思考。可是…… 因為,我們查一個簡單的單字,有可能在英文解釋裡面,卻用了更難更深的單字去解釋它!有時,為了查一個單字,變成要查15個單字!
Thumbnail
以前青茶在國外念書時,國外老師一直要求我們要用英文字典,當時旁邊的同學用中文小聲的說,用英漢字典都有障礙了,怎麼可能用英英字典嘛!我馬上青茶就回了一個遇見知音的眼神,當時年少輕狂的我 覺得用中文翻譯懂意思就是學習語言。本集就是告訴大家為什麼要使用原文字典,以及該如何著手。 00:00 開場
靜處一角落的妳 總是無言 但 我開門妳恆迎等著 當疑問人生難題 妳敞開雙臂擁我入懷 於妳浩瀚無涯愛情裡 任我挑弄尋戲 默默底 妳回應了我的饑渴
Thumbnail
其實也不能怪字典,full circle moment [fʊlˈsɜrkəlˈmoʊmənt] 這句話奧義頗深,解釋完可以耗掉一篇文章。你可能立刻想到這句英文是「圓滿的時刻」,但它的用法可沒我們中文腦想的這麼簡單呢。
Thumbnail
其實都不用買。沒有任何推薦。什麼時代了,還買字典。 上述這段話,是給有網路的人看的。至於針對沒有網路,又怕她一拿起手機就打手遊的小屁孩,我推薦朗文字典(沒有置入,也沒有廠商贊助,純推廣~)一本800左右,用一輩子。划算。 電子字典,不推。翻譯機,不推。還有什麼?大家一起上,開放問答~