LeetCode 14 Longest Common Prefix

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

这题是寻找一组字符串的最长公共前缀,举个例子:

“abc” "a"显然lPrefixString = "a",注意检查空串的情况!!!

联系使用顺序程序,和递归解决以上问题:

 

class Solution {
public:
    string longestCommonPrefix(vector<string> &strs)
{
    int nSize = strs.size();
    int nPrefixNum = INT_MAX;
    if(nSize  == 0)
    {
        return "";
    }
    string iCompare(strs[0]);
    for(int i= 0; i< nSize; ++i)
    {
        int temp = 0;
        
        if (iCompare.size() == 0 || strs[i].size() == 0)  
            return "";  

        string::size_type iScanA = 0;
        string::size_type iScanB = 0;
        while(iScanA != iCompare.size() && iScanB != strs[i].size() )
        {
            if(iCompare[iScanA] == strs[i][iScanB])
            {
                temp++;
                iScanA++;
                iScanB++;
            }
            else
            {
                break;
            }
        }
        if(temp < nPrefixNum )
        {
            nPrefixNum = temp;
            iCompare = strs[i];
        }
    }
    string ret;
    ret.assign(iCompare, 0, nPrefixNum);
    return ret;
}
};

 

class Solution {
public:
    string longestCommonPrefix(vector<string> &strs)
{
    int nSize = strs.size();
    if(nSize == 0)
    {
        return "";
    }
    string iCompare(strs[0]);
    int nPrefix = INT_MAX;
    findlongestPrefix(strs, iCompare, 0, nPrefix);
    return iCompare.assign(iCompare, 0, nPrefix);
}
void findlongestPrefix(vector<string> &strs, string &src1, int i, int &nPrefixNum)
{
    string::size_type iScanA = 0;
    string::size_type iScanB = 0;
    int temp = 0;
    string src2(strs[i]);

    while(iScanA != src1.size() && iScanB != src2.size())
    {
        if(src1.size()==0 || src2.size()==0)
        {
            return ;
        }
        if(src1[iScanA] == src2[iScanB])
        {
            temp++;
            iScanA++;
            iScanB++;
        }
        else
        {
            break;
        }
    }
    int nSize = strs.size();
    if(i+1 == nSize)
    {
        if(temp < nPrefixNum)
            nPrefixNum = temp;
        return ;
    }
    if(temp < nPrefixNum)
    {   
        src1.assign(src1, 0, temp);
        nPrefixNum = temp;
        findlongestPrefix(strs, src1, i+1, nPrefixNum );
    }
    else
    {
        findlongestPrefix(strs, src1, i+1, nPrefixNum);
    }
    
    
}

};

一句话,你必须万分努力才能看起来毫不费力!

 

posted @ 2015-04-25 19:12  BestWangJie  阅读(134)  评论(0编辑  收藏  举报