1. 程式人生 > >【leetcode】14. Longest Common Prefix 最長公共字首

【leetcode】14. Longest Common Prefix 最長公共字首

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)。

答案中還給了一個二分法的演算法,感覺是非常的巧妙,看來會有效的減輕演算法時間複雜度。等以後有時間會研究一波。