為了加強自己的程式能力,因此記錄每天刷leetcode的解法+說明,今天會用Ruby
、Python
、JavaScript
來解題,今天來到第五天,讓我們繼續吧!
題目來源:leetcode
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13
| def longest_common_prefix(strs) return "" if strs.empty?
common_prefix = "" first_str = strs.first
first_str.chars.each_with_index do |char, i| break unless strs.all? { |str| str[i] == char } common_prefix += char end
common_prefix end
|
先從陣列中取出第一個數為first_str
,作為比較的基準,接著使用.chars.each_with_index
對第一個詞每個字母做迭代,並返回索引值i
。
.all
是來檢查array
中的所有元素是否都符合给定的條件,這裡的條件就是str[i] == char
,如果有不同即停止。
common_prefix
即記錄array
中相同的字
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return ""
common_prefix = "" first_str = strs[0]
for i, char in enumerate(first_str): if any(i >= len(s) or s[i] != char for s in strs): break common_prefix += char
return common_prefix
|
enumerate
會回傳字串的index
,以下是範例
1 2 3
| >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
|
s[i]
則是代表str
內的i
位置的字母,基本上和ruby邏輯一樣,只是寫法不同而已!
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function longestCommonPrefix(strs) { if (strs.length === 0) { return ""; }
let commonPrefix = ""; const firstStr = strs[0];
for (let i = 0; i < firstStr.length; i++) { const char = firstStr[i]; if (!strs.every(str => str[i] === char)) { break; } commonPrefix += char; }
return commonPrefix; }
|
JS
的寫法和Ruby
差不多,可以使用.every
來確保是否為相同字母,其他解法就和Ruby
和Python
類似,差別在使用for (let i = 0; i < firstStr.length; i++)
迴圈,並使用str[i]
來比對文字是否相符,最後也完成解答!
這幾天寫下來Ruby看起來還是最簡潔優雅٩(●˙▿˙●)۶,看起來好舒服
Comments