Skip to main content

Command Palette

Search for a command to run...

LeetCode Solution, Medium, 192. Word Frequency

Published

I am not a programmer just a leaner. Writing JavaScript, Python, and Go and doing something on Kubernetes.

192. Word Frequency

題目敘述

Write a bash script to calculate the frequency of each word in a text file words.txt.

For simplicity sake, you may assume:

  • words.txt contains only lowercase characters and space ' ' characters.
  • Each word must consist of lowercase characters only.
  • Words are separated by one or more whitespace characters.

Example:

Assume that words.txt has the following content:

the day is sunny the the
the sunny is is

Your script should output the following, sorted by descending frequency:

the 4
is 3
sunny 2
day 1

Note:

  • Don't worry about handling ties, it is guaranteed that each word's frequency count is unique.
  • Could you write it in one-line using Unix pipes?

題目翻譯

題目簡單的需求就像是第一行說的,從 words.txt 這檔案中計算出每個單字出現的頻率。其中在 words.txt 的每個單字都只會是小寫字母,並用 ' ' 一到兩個空白字元來區隔。

解法解析

範例

Bash

Runtime

# Read from the file words.txt and output the word frequency list to stdout.
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{ print $2, $1 }'
  1. cat 讀出所有的內容
  2. tr 來替換空白字元為\n 換行字元,另外搭配 -s 將多個連續的空白字元換成一個(因為題目有說到會是用一到兩個空白字元來區隔,如果沒有搭配 -s 會變成 \n\n)
  3. sort 按照開頭字母排序
  4. uniq 來處理重複的單字,搭配 -c 可以計算重複出現的字數。會形成
    1 day
    2 is
    2 sunny
    4 the
    
  5. 再次使用 sort,這次是多使用了 -r 是為了讓他排序反轉,變成出現最多的在最上面
  6. 最後用 awk 將單字和出現次數的位置互換

Memory

# Read from the file words.txt and output the word frequency list to stdout.
grep -o -E '\w+' words.txt | sort | uniq -c | sort -r | sed -r 's/\s+([0-9]+) ([a-z]+)/\2 \1/'
  1. 使用 grep 搭配 -o(只輸出符合條件的行數) 和 -E(使用 Regex 做篩選),可以看到用的 Regex 是 \w+ 判斷是不是字母,所以會略過空白字元
  2. 後面的操作 sort | uniq -c | sort -r 跟 Runtime 是一樣的操作
  3. 最後則是使用了 sed 來做位置的互換。可以拆兩個部分來看

    1. +([0-9]+)([a-z]+)
    2. \2\1

    符合第一個條件 +([0-9]+) 換到第二個位置,反之亦然

LeetCode Solution

Part 1 of 50

A collection of leetcode solustion

More from this blog

如何開始入門軟體工程領域 - 名詞解釋(長期更新)

現在應該開始有很多人想要踏入軟體工程的領域,但在進入這個領域之前,覺得先了解一些名詞,可以在入門時更有方向也更知道要用什麼關鍵字去找尋有用的資訊。這篇文章就是想要幫助想要入門的人理解一些軟體工程裡的專有名詞。 作業系統 這一區塊主要解釋跟作業系統層面相關的名詞 英文中文解釋 Operation system 簡稱 OS | 作業系統 | 就是電腦的作業系統,是三大作業系統分別是:Linux、Windows、macOS | | Linux | | 自由和開放原始碼的 UNI...

May 10, 2023

我的 MacBook Pro (Apple Silicon) 設定

現在開始因為 ChatGPT 的出現,各種 AI 助手的功能都跑出來了。想想自己用了許久的環境設定也應該要來重新審視和建立新的開發環境了,僅此紀錄我個人的環境配置步驟和設定。 環境前置步驟 還原 MacBook Pro 至全新環境 macOS(全部資料刪除) 設定好初始設定後,登入 Apple ID 進入 App Store 確定 macOS 版本和預設 APP 都更新到最新 macOS 版本 到系統設定調整所有設定至個人習慣的設定 三指拖移 觸控板手勢開啟 防火牆開啟 輸入法設定...

Apr 25, 2023

ChatGPT 下的發展預想

從 ChatGPT 問世到現在,有許許多多的文章和討論出來。先從最早的 Google 要完蛋了,到後來的工作要被取代了,工程師失業了。 我就比較沒有想要馬上出來評論一下,我喜歡讓子彈飛一會兒。跟討論一下我自己比較在意的討論點。 Google 為什麼慢了? 結論:因為他需要更小心 很多人說 Google 怎麼被微軟搶先了一步。剛開始 Bing 說要加上 AI 的時候大家都在說 Google 怎麼慢了。我就馬上跑去看 OpenAI 的網站,靠北呀啊就 Azure 贊助的。那當然在正式上線 ChatG...

Mar 23, 2023

不工程的攻城獅

223 posts

I am not a programmer because I am not good at programming. But I do programming. Love to learn new things. An animal lover and a dancer. My oshi is 潤羽るしあ.