您的位置:首页 > 其它

[LeetCode 题解]: Longest Common Prefix

2014-06-17 21:17 253 查看
Write a function to find the longest common prefix string amongst an array of strings.

题解: 寻找一组字符串的最长公共前缀。

最简单的方法,用一个字符串记录当前最长的公共前缀,然后依次比较。时间复杂度: O(N).

 class Solution {
public:
string getPrefix(string a,string b)   // 辅助函数用于获取两个字符串的公共前缀
{
string ans;
for(int i=0;i<a.size() && i<b.size();i++)
{
if(a[i]==b[i])  ans+=a[i];
else break;
}
return ans;
}
string longestCommonPrefix(vector<string> &strs) {
string a;
int len = strs.size();
if(!len) return a;
a = strs[0];
for(int i=1;i<len;i++) a= getPrefix(a,strs[i]);
return a;
}
};


高效的方法,采用分治法,先分块,后合并比较,时间复杂度O(logN)。

 class Solution {
public:
string getPrefix(string a,string b)   //辅助函数,用于获取两个字符串的公共前缀
{
string ans;
for(int i=0;i<a.size() && i<b.size();i++)
{
if(a[i]==b[i])  ans+=a[i];
else break;
}
return ans;
}
string commonPrefix(int left,int right, vector<string> &strs)   //分治法寻找commonPrefix
{
if(left>=right) return strs[left];
if(left+1==right) return getPrefix(strs[left],strs[right]);
int middle = (right+left)>>1;
return getPrefix(commonPrefix(left,middle,strs),commonPrefix(middle+1,right,strs));
}
string longestCommonPrefix(vector<string> &strs) {
int i=0,len=strs.size();
string a;
if(!len) return a;
return commonPrefix(0,len-1,strs);
}
};


转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: