您的位置:首页 > 其它

14. Longest Common Prefix(leetcode)

2016-03-09 22:16 267 查看
ps:其他的解题报告我放在了我的github上,有需要的朋友可以去看下。github:https://github.com/dyljqq/Algorithm

14. Longest Common Prefix

题目:Write a function to find the longest common prefix string amongst an array of strings.

思路:找所有字符串的最大前缀。我刚开始的想法是先找到最短的字符串,然后根据这个字符串长度去找最大前缀。时间复杂度是O(N * l),l表示最短字符串

的长度。后来发现不需要啊,我拿第一个字符串开始找,每次遍历一遍剩余的字符串的起始字符,那么就能获得最大前缀,然后发现时间快乐好多。时间复杂度是

O(l * N),当然这个是最坏的情况,好一点的就会快很多。比如N=2, 然后l = 1等。所以这个方案显然优于我的第一个方案。

代码:

第一种:(4ms)

class Solution {

public:

    string longestCommonPrefix(vector<string>& strs) {

        if(strs.size() <= 0)

            return "";

        int flag = 0;

        string smallStr = strs[0];

        for(int i = 1; i < strs.size(); i++){

            if(smallStr.length() < strs[i].length()){

                smallStr = strs[i];

                flag = i;

           
a96e
}

        }

        for(int i = 0; i < strs.size(); i++){

            if(i == flag)

                continue;

            string prefix = "";

            for(int j = 0; j < smallStr.length(); j++){

                if(strs[i][j] != smallStr[j]){

                    smallStr = prefix;

                    break;

                }

                prefix += smallStr[j];

            }

        }

        return smallStr;

    }

};

第二种:

class Solution {

public:

    string longestCommonPrefix(vector<string>& strs) {

        int n = strs.size();

        if(n == 0)return res;

        string res;

        for(int pos = 0; pos < strs[0].size(); pos++)

        {

            for(int k = 1; k < n; k++)

            {

                if(strs[k].size() == pos || strs[k][pos] != strs[0][pos])

                    return res;

            }

            res.push_back(strs[0][pos]);

        }

        return res;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: