[LeetCode]Longest Common Prefix

题目说明:

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

 

程序代码:

#include <gtest/gtest.h>
using namespace std;

string longestCommonPrefix1(vector<string>& strs) 
{    
    int nMinLength = std::numeric_limits<int>::max();
    int nLength = strs.size();
    if (nLength == 0)
    {
        return "";
    }

    for (int i=0; i < nLength; ++i)
    {
        if (strs[i].length() < nMinLength)
        {
            nMinLength = strs[i].length();
        }
    }

    int nLCPLength = 0;
    for (int i=0; i < nMinLength; ++i)
    {
        int temp = strs[0][i];
        bool match = true;
        for (int j=1; j < nLength; ++j)        
        {
            if (temp != strs[j][i])
            {
                match = false;
                break;
            }
        }

        if (!match)
        {
            break;
        }

        nLCPLength++;
    }

    string strResult;
    if (nLCPLength > 0)
    {
        strResult = strs[0].substr(0,nLCPLength);
    }

    return strResult;
}

string longestCommonPrefix(vector<string>& strs) 
{
    if (strs.size() == 0)
    {
        return "";
    }

    for (int i=0; i<strs[0].length(); ++i)
    {
        for (int j=1; j<strs.size(); ++j)
        {
            if ((i >= strs[j].length()) || (strs[0][i] != strs[j][i]))
            {
                return strs[0].substr(0,i);
            }
        }
    }

    return strs[0];
}

TEST(Pratices, tLongestCommonPrefix)
{
    //123124444
    //12355233
    //12

    vector<string> data;
    data.push_back("123124444");
    data.push_back("12355233");
    data.push_back("12");

    ASSERT_EQ(longestCommonPrefix(data), "12");

    data.clear();
    ASSERT_EQ(longestCommonPrefix(data), "");
}
posted @ 2016-03-24 15:39  Quincy  阅读(350)  评论(0编辑  收藏  举报