14 Longest Common Prefix

文章目录如下

(1)自己的思路

(2)自己的代码

(3)别人的思路

(4)别人的代码

(5)对比自己的不足之处

题目如下:

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

(1)自己的思路

a.首先要选出所有string中最长的前缀,得纵向的比较每个string中相同的列的字符是否相等,如果相等,那么继续,如果发现不相等,那么直接返回前面扫描过的字符串即可。

b.这些前缀的长度最长也不超过所有string中最短的那个string的长度。

(2)自己的代码

class Solution {
public:

    string longestCommonPrefix(vector<string>& strs) {
        int minLen = INT_MAX;
        int strsLen = strs.size();

        for (int i = 0; i < strsLen; i++)
        {
            if (minLen > strs.at(i).length())
                minLen = strs.at(i).length();
        }

        vector<char> pref;
        int isFinish = false;

        char tmpC = '\0';
        char tmpc = '\0';
        for (int m = 0;m < minLen; m++)
        {
            tmpC = strs.at(0)[m];

            for (int n = 0;n < strsLen; n++)
            {
                tmpc = strs.at(n)[m];
                if (tmpC != tmpc) 
                {
                    isFinish = true;
                    break;
                }
            }
            if (isFinish)
                break;

            pref.push_back(tmpC);
        }

        int preLen = pref.size();
        string prefix(preLen, '\0');
        for (int t = 0;t < preLen; t++) 
        {
            prefix.replace(t, 1, 1, pref.at(t));
        }
        return prefix;
    }
};

 

(3)别人的思路

思路是一样的,但是别人的代码确实是又精简,又清晰!

(4)别人的代码

class Solution {
public:
    string longestCommonPrefix(vector<string> &strs) {
        if (strs.empty()) return "";

        for (int idx = 0; idx < strs[0].size(); ++idx) { // 纵向扫描
            for (int i = 1; i < strs.size(); ++i) {
                if (strs[i][idx] != strs[0][idx]) return strs[0].substr(0,idx);
            }
        }
        return strs[0];
    }
};

 

(5)对比自己的不足之处

a.如果说写代码是写作文的话,总觉得我用的是白话文,别人用的是文言文……

b.我的代码在VS2015上是可以编译运行的(运行结果正确),但是在网站上运行出错,我也不知道为什么……

 

posted @ 2016-04-05 00:19  MAGICY  阅读(132)  评论(0编辑  收藏  举报