題目描述為給定一陣列,裡面存放元素為字串,要找出最長的共同前綴詞。
題目還有補充說明字串裡面只會包含小寫英文字母 a~z。
例子1:
Input: ["flower","flow","flight"]
Output: "fl"
設此字串陣列為 strs 且非空,我們可以用第一個字串 fs 為基準,與其他字串進行比較。
流程如下: 先比較是否所有字串都包含 fs 的第一個字元,若有任一個字串不包含則停止比較。
若所有字串都包含則繼續比較 fs 的第二個字元,重複此步驟。
其中因為各字串長度並不相同,我們需要防止上述流程中查找的長度造成數組越界,即增加限制條件:
當比較到字串 fs 第 k 個字元時,若比較中的字串長度 < k 則不進行比較。
按此流程我們可以知道最多可以取到字串 fs 的第幾個字元為共同前綴詞。
參考程式碼
func longestCommonPrefix(strs []string) string {
if len(strs)==0{
return ""
}
s:=""
for i:=0;i<len(strs[0]);i++{
for j:=1;j<len(strs);j++{
if ( (i>=len(strs[j])) || (strs[0][i]!=strs[j][i]) ){
return s
}
}
s+=string(strs[0][i])
}
return s
}
思路1可以簡單修改:先找出字串陣列中最小長度 minL,省去檢查限制條件,只需要專注比較字元是否相同即可。
我將修改後的方法作為解法2 加上簡單的測試,上傳程式碼到此。