iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ系列 第 6

[LeetCode with JavaScript] Day 6: Longest Common Prefix

觀前提醒:

  1. 我預設大家已經先思考並分析過題目,沒啥想法才開始 google 找解題靈感。若無,建議每題先花 1~2 顆番茄鐘的時間來分析題目比較好。可參考番茄鐘工作法
  2. 承上,既然已經有思考過了,那我這邊直接 po 題目 + 解題想法 + code +心得 。若已經在 code 內有足夠的註解了,那我可能解題想法 & 心得的部分就不會寫太多,免得干擾你的思考。
  3. 所有解法都是已經取得系統的 Accepted,但或許不是最優解法,請多包涵。
  4. 若對於解法不太懂,可以嘗試用 Chrome 的 debugger 來試跑看看 (教學文)
  5. 最後,歡迎在下面留言指教~教學相長才會進步歐~/images/emoticon/emoticon41.gif

題目

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""

Explanation: There is no common prefix among the input strings.
Note:

All given inputs are in lowercase letters a-z.

解題想法

可參考以下的圖,簡單來說,類似"削足適履"的概念。英文版可參考右邊連結LeetCode Solution
image

至於解題步驟的話,可參考下列的解說。

  • 先宣告 strs[0] 為 ansPrefix (暫時性)
  • 若當 ansPrefix !== strs[i]時,則 strs[i].indexOf(ansPrefix) 必為 -1。
  • 反之,當 ansPrefix === strs[i]時 strs[i].indexOf(ansPrefix)必為 "0"! 代表 ansPrefix 符合當下的第 i 個字串!,indexOf才會變成 0!
  • 並執行下面這行,利用substring的本身特性,用 ansPrefix.length - 1截去目前 ansPrefix 一個字元。然後重新執行 indexOf(ansPrefix),直到條件本身變成0為止。迴圈就會跳開~
  • 如果 ansPrefix 被截到沒字元了 (null),則直接回傳 ""

CODE

/**
 * @param {string[]} strs
 * @return {string}
 */

// 解題心法:參力扣解法一
// https://leetcode.com/problems/longest-common-prefix/solution/
var longestCommonPrefix = function (strs) {
  // 處理edge case
  if (strs.length === 0) return "";
  let ansPrefix = strs[0];
  for (let i = 0; i < strs.length; i++) {
    while (strs[i].indexOf(ansPrefix) !== 0) {
      ansPrefix = ansPrefix.substring(0, ansPrefix.length - 1);
      if (ansPrefix === null) return "";
    }
  }
  return ansPrefix;
};

心得

這題的解法,我是自己 TRY 一陣子後,總覺得好像還是差了一點,
便默默地跑去看了人家官方的 Guideline。/images/emoticon/emoticon25.gif
謝謝大家的收看,LeetCode 小學堂我們下次見~/images/emoticon/emoticon29.gif


上一篇
[LeetCode with JavaScript] Day 5: String to Integer (atoi)
下一篇
[LeetCode with JavaScript] Day 7: Count and Say
系列文
[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言