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 “”.
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
Comments