LeetCode: Longest Common Prefix

Question

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: strs = ["flower","flow","flight"]
Output: "fl"

Example 2:
Input: strs = ["dog","racecar","car"]
Output: ""

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

Solution

首先把可能的 input 特例抓出來,如果 strs 是 nil 或是空的,就會回傳空字串 “ ”

接著以 Enumerable#min_by 方法可以抓出 strs 集合內,字串最短的元素就可能是潛在的 prefix。

得到可能的 prefix 之後,使用 each 方法讓集合內的每個字都與 index(prefix) 方法做比對。 如果回傳是 0,那就代表集合內的某個字是含有 prefix 。

反之,如果回傳 nil,在 while 迴圈會持續縮短 prefix 的字串,再重新定義 prefix ㄧ直到 index(prefix) 等於 0。

def longest_common_prefix(strs)
  return '' if strs.nil? || strs.empty?

  prefix = strs.min_by { |x| x.length }

  strs.each do |word|
    while word.index(prefix) != 0
      prefix = prefix[0...prefix.length - 1]
    end
  end
  prefix
end