14. 最長公共字首
阿新 • • 發佈:2021-01-15
技術標籤:LeetCode
14. 最長公共字首
題目描述
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""
。
示例1
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例2
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共字首。
提示:
-
0
≤
s
t
r
s
.
l
e
n
g
t
h
≤
200
0 \le strs.length \le 200
- 0 ≤ s t r s [ i ] . l e n g t h ≤ 200 0 \le strs[i].length \le 200 0≤strs[i].length≤200
strs[i]
僅由小寫英文字母組成
題解:
列舉 strs[0]
的每個字元,然後判斷 strs[1...n-1]
對應位的字元是否相等。
- 不相等應立即退出迴圈,此時該字元不可能是公共字首
- 列舉的位置超過某個字串的長度也應退出迴圈
時間複雜度:
O
(
m
i
n
{
l
e
n
(
s
t
r
s
[
0...
n
−
1
]
)
}
∗
n
)
O(min\{len(strs[0...n-1])\} * n)
O(min{len(strs[0...n−1])}∗n)
額外空間複雜度: O ( 1 ) O(1) O(1)
程式碼:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if ( !strs.size() ) return "";
string ret = "";
char ch;
bool flag;
int len = 0;
for ( int i = 0; i < strs[0].size(); ++i ) {
ch = strs[0][i];
flag = true;
for ( int j = 1; j < strs.size(); ++j ) {
if ( !(strs[j].size() > i && strs[j][i] == ch) ) {
flag = false;
break;
}
}
if ( !flag ) break;
else ++len;
}
return strs[0].substr(0, len);
}
};
/*
時間:4ms,擊敗:92.30%
記憶體:8.9MB,擊敗:99.39%
*/