【leetcode】14. Longest Common Prefix 最長公共字首
阿新 • • 發佈:2018-12-13
1.
在使用C++ String 類時,要加上 #include <iostream> 和 # include <string> 而不是 <string.h>.
string s6(5,
'A'
);
表示 生成一個字串包含 5 個 ‘A’。
對於 str.length() 與 str. size()實際表示的是一種意思,都是字串的長度,字串包含的字元的個數。
str.push_back(char c)是指在字串的尾部新增一個字元c .
str.append("123")可以將字串連線起來。
2.
題目描述
題目是從幾個字串中找到它們最大的相同的字首,主要解決思想是:
如果沒有字串存在於這個vector中,那麼return “”沒有空格,表示一個空字串;
將第一個字串的第 j 個字元開始,依次與其餘的各個字串的第 j 個字元相比,如果發現 後面的某一個字串根本沒有 第 j 個字元,或者第 j 個字元不相同, 那麼相同的最大字首就到目前為止,否則就將當前的這個相同的字元加入到 res 字串 中, 用到的就是 push_back().
程式碼為:
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if(strs.empty()) return ""; string res = ""; //都不包含空格 for (int j = 0; j < strs[0].size(); j++){ char c = strs[0][j]; for(int i = 1; i < strs.size(); i++){ if(j > strs[i].size() || strs[i][j] != c){ return res; } //後面的每個字串都和第一個字串的第 j 個字元進行比較 } res.push_back(c); } return res; } };
用時 8 ms, 與答案中描述的垂直遍歷比較相似,就是一列一列的搜尋,在搜尋完一列之後,再進行下一列的搜尋,時間複雜度為 O(1)。
答案中還給了一個二分法的演算法,感覺是非常的巧妙,看來會有效的減輕演算法時間複雜度。等以後有時間會研究一波。