LEETCODE專題
14. Longest Common Prefix
題目要求:
題目要求我們找到一個字符串數組裏的最長共同前綴字符串。
思路:
- 這道題目比較簡單,大概思路就是一般情況時我們可以從第1和第2個字符串開始匹配最長共同前綴字符串,再匹配第3和第4個字符串,……以此類推。此外,可以先初始化匹配字符串爲第1個字符串,表示第1個字符串與第0個字符串匹配的結果,可以理解爲第0個字符串是“萬金油”,此後所有的匹配結果都要與上一組的匹配結果進行比較,如果後來的結果長度更長則不改變之前的結果,否則後來匹配的結果覆蓋最長匹配字符串並作爲下一組匹配的結果的比較字符串。
- 這道題目主要有兩個坑(之前筆者沒學好string(&…&!))。筆者使用的最長共同前綴字符串prefix的初始化爲
string prefix = "";
第一個坑是vector有可能爲空,這是後直接返回prefix會產生”reference to nullptr”的錯誤,應該改爲
return "";
此處返回常量字符串的話會自動生成’\0’,免除上述的困擾。
第二個坑就是vector有可能只有一個字符串,此時返回的應該是該字符串。(其實筆者後來該的時候發現是完全可以跳過這個坑的,不過當時腦抽了…)
下面直接上代碼:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0) return "";
if (strs.size() == 1) return strs[0];
string prefix = strs[0], temp;
int i, j;
for (i = 0; i < strs.size() - 1; i++) {
j = 0;
if (strs[i + 1].length() == 0) return "";
temp.clear();
while (j < strs[i].length() && j < strs[i + 1].length() && strs[i][j] == strs[i + 1][j]) {
temp += strs[i][j++];
}
if (temp.length() < prefix.length()) prefix = temp;
}
return prefix;
}
};
時間複雜度:O(nm)