前端工程師的 LeetCode 之旅 -- 周賽 184




01 數組中的字符串匹配


題目描述【Easy】

給你一個字符串數組 words ,數組中的每一個字符串均可以看做是一個單詞。請你按 任意 順序返回 words 中是其餘單詞的子字符串的全部單詞。 若是你能夠刪除 words[j] 最左側和/或最右側的若干字符獲得 word[i] ,那麼字符串 words[i] 就是 words[j] 的一個子字符串。 示例: 輸入:words = ['mass','as','hero','superhero'] 輸出:['as','hero'] 解釋:'as' 是 'mass' 的子字符串,'hero' 是 'superhero' 的子字符串。 ['hero','as'] 也是有效的答案。


對於字符串匹配問題,在 JavaScript 中能夠利用 indexOf 方法快速判斷子字符串。前端

在第二次遍歷的過程當中,一旦找到知足要求的字符串,利用 break 語句及時退出循環,避免沒必要要的時間消耗。git

時間複雜度 O(n^2),空間複雜度 O(n)。github




02 查詢帶鍵的排列


題目描述【Medium】

給你一個待查數組 queries ,數組中的元素爲 1 到 m 之間的正整數。請你根據如下規則處理全部待查項 queries[i](從 i=0 到 i=queries.length-1): 一開始,排列 P=[1,2,3,...,m]。 對於當前的 i ,請你找出待查項 queries[i] 在排列 P 中的位置(下標從 0 開始),而後將其從原位置移動到排列 P 的起始位置(即下標爲 0 處)。注意, queries[i] 在 P 中的位置就是 queries[i] 的查詢結果。 請你以數組形式返回待查數組 queries 的查詢結果。 示例: 輸入:queries = [3,1,2,1], m = 5 輸出:[2,1,2,1] 解釋:待查數組 queries 處理以下: 對於 i=0: queries[i]=3, P=[1,2,3,4,5], 3 在 P 中的位置是 2,接着咱們把 3 移動到 P 的起始位置,獲得 P=[3,1,2,4,5] 。 對於 i=1: queries[i]=1, P=[3,1,2,4,5], 1 在 P 中的位置是 1,接着咱們把 1 移動到 P 的起始位置,獲得 P=[1,3,2,4,5] 。 對於 i=2: queries[i]=2, P=[1,3,2,4,5], 2 在 P 中的位置是 2,接着咱們把 2 移動到 P 的起始位置,獲得 P=[2,1,3,4,5] 。 對於 i=3: queries[i]=1, P=[2,1,3,4,5], 1 在 P 中的位置是 1,接着咱們把 1 移動到 P 的起始位置,獲得 P=[1,2,3,4,5] 。 所以,返回的結果數組爲 [2,1,2,1] 。


本道題主要考察數組的基本操做。數組

時間複雜度 O(n^2),空間複雜度 O(n)。markdown




03 HTML 實體解析器


題目描述【Medium】

「HTML 實體解析器」 是一種特殊的解析器,它將 HTML 代碼做爲輸入,並用字符自己替換掉全部這些特殊的字符實體。 HTML 裏這些特殊字符和它們對應的字符實體包括: 雙引號:字符實體爲 " ,對應的字符是 ''。 單引號:字符實體爲 ' ,對應的字符是 ' 。 與符號:字符實體爲 & ,對應對的字符是 & 。 大於號:字符實體爲 > ,對應的字符是 > 。 小於號:字符實體爲 < ,對應的字符是 < 。 斜線號:字符實體爲 ⁄ ,對應的字符是 / 。 給你輸入字符串 text ,請你實現一個 HTML 實體解析器,返回解析器解析後的結果。 示例: 輸入:text = '& is an HTML entity but &ambassador; is not.' 輸出:'& is an HTML entity but &ambassador; is not.' 解釋:解析器把字符實體 & 用 & 替換


本道題主要考察字符串的匹配,這裏能夠採用 JavaScript 中的 replace 方法結合正則完成目標字符串的替換。前端工程師




04 給 N x 3 網格塗色的方案數


題目描述【Hard】

你有一個 n x 3 的網格圖 grid ,你須要用 紅,黃,綠 三種顏色之一給每個格子上色,且確保相鄰格子顏色不一樣(也就是有相同水平邊或者垂直邊的格子顏色不一樣)。 給你網格圖的行數 n 。 請你返回給 grid 塗色的方案數。因爲答案可能會很是大,請你返回答案對 10^9 + 7 取餘的結果。 示例: 輸入:n = 1 輸出:12 解釋:總共有 12 種可行的方法


因爲是 N * 3 的網格,因此水平方向只有上述這 12 種狀況,接下來要根據上述狀況來推算下一層的塗色,也就是考慮垂直方向相鄰格子顏色不一樣的狀況。oop

aba 模式的下一級一共有 5 種狀況。spa

abc 模式的下一級一共有 4 種狀況。code

到這裏,能夠看出:對於 N * 3 的網格,其塗色的方案數應該是由 (N - 1) * 3 網格中的 aba 和 abc 數量決定,因此本題能夠採用動態規劃來解決。orm

再仔細看上面兩張圖,能夠獲得 aba 和 abc 的狀態轉移方程:

  • aba(n) = aba(n - 1) * 3 + abc(n - 1) * 2

  • abc(n) = aba(n - 1) * 2 + abc(n - 1) * 2

時間複雜度 O(n),空間複雜度 O(1)。




05 往期精彩回顧




相關文章
相關標籤/搜索