您的位置:首页 > 其它

【LeetCode】14. Longest Common Prefix (2 solutions)

2014-11-04 12:46 363 查看
Longest Common Prefix

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

解法一:

思路:设置一个位数记录器num,遍历所有字符串的第num位。如果都相同,则num++。

直到某字符串结束或者所有字符串的第num位不都相同,则返回[0~num-1]位,即最长公共前缀。

class Solution {
public:
string longestCommonPrefix(vector<string> &strs) {
if(strs.empty())
return "";
else if(strs.size() == 1)
return strs[0];
else
{
string ret = "";
int num = 0;
char c = strs[0][num];
while(true)
{
for(vector<string>::size_type st = 0; st < strs.size(); st ++)
{
if(num < strs[st].size() && strs[st][num] == c)
{//match
if(st == strs.size()-1)
{//end
ret += c;
num ++;
c = strs[0][num];
}
}
else
return ret;
}
}
}
}

};




解法二:

类似解法一,换个写法。

class Solution {
public:
string longestCommonPrefix(vector<string> &strs) {
string ret = "";
char c;
int index = 0;
if(strs.empty())
return ret;
while(true)
{
for(int i = 0; i < strs.size(); i ++)
{
if(i == 0)
{
if(index < strs[0].size())
c = strs[0][index];
else
return ret;
}
// no else, 0 may equals to strs.size()-1
if(i == strs.size()-1)
{
if(index >= strs[i].size() || strs[i][index] != c)
return ret;
else
{
ret += c;
index ++;
}
}
if(i != 0 && i != strs.size()-1)
{
if(index >= strs[i].size() || strs[i][index] != c)
return ret;
}
}
}
return ret;
}
};


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