編寫乙個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 「」。
示例 1
:輸入:
["flower"
,"flow"
,"flight"
]輸出:
"fl"
示例 2
:輸入:
["dog"
,"racecar"
,"car"
]輸出:
""
解釋: 輸入不存在公共字首。
方法1:橫向掃瞄
class
solution
string prefix = strs[0]
;int count = strs.length;
for(
int i =
1; i < count; i++)}
return prefix;
}public string longestcommonprefix
(string str1, string str2)
return str1.
substring(0
, index);}
}
時間複雜度:o
(mn),其中 m是字串陣列中的字串的平均長度,n 是字串的數量。最壞情況下,字串陣列中的每個字串的每個字元都會被比較一次。
空間複雜度:o(1
)。使用的額外空間複雜度為常數。
方法2:縱向掃瞄
class
solution
int length = strs[0]
.length()
;int count = strs.length;
for(
int i =
0; i < length; i++)}
}return strs[0]
;}}
時間複雜度:o
(mn),其中 m 是字串陣列中的字串的平均長度,n 是字串的數量。最壞情況下,字串陣列中的每個字串的每個字元都會被比較一次。
空間複雜度:o(1
)。使用的額外空間複雜度為常數。
方法3:分治
class
solution
else
}public string longestcommonprefix
(string[
] strs,
int start,
int end)
else
}public string commonprefix
(string lcpleft, string lcpright)
}return lcpleft.
substring(0
, minlength);}
}
時間複雜度:o
(mn),其中 m 是字串陣列中的字串的平均長度,n 是字串的數量。時間複雜度的遞推式是 t
(n)=
2⋅t(n/2)
+o(m),通過計算可得t
(n)=
o(mn)。
空間複雜度:o
(mlogn),其中 m 是字串陣列中的字串的平均長度,n 是字串的數量。空間複雜度主要取決於遞迴呼叫的層數,層數最大為 logn,每層需要 m 的空間儲存返回結果。
方法4:二分查詢
class
solution
int minlength = integer.max_value;
for(string str : strs)
int low =
0, high = minlength;
while
(low < high)
else
}return strs[0]
.substring(0
, low);}
public
boolean
iscommonprefix
(string[
] strs,
int length)}}
return
true;}
}
時間複雜度:o
(mnlogm),其中 m 是字串陣列中的字串的最小長度,n 是字串的數量。二分查詢的迭代執行次數是o
(logm),每次迭代最多需要比較 mn 個字元,因此總時間複雜度是 o
(mnlogm)。
空間複雜度:o(1
)。使用的額外空間複雜度為常數。
最長公共字首
描述 給k個字串,求出他們的最長公共字首 lcp 樣例 在 abcd abef 和 acef 中,lcp 為 a 在 abcdefg abcefg abcefa 中,lcp 為 abc 新知識點 vectorstrs既可以是一維的,也可以是多維的。在這裡講解三維的初始化。vector str str...
最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。class solution object...
最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。param strs return var...