您的位置:首页 > 职场人生

lintcode之最长公共前缀

2016-04-16 20:30 399 查看
题目:

给k个字符串,求出他们的最长公共前缀(LCP)

解答:

这道题做法应该很多,可以用trie树,也可以直接枚举

我是用二分+测试做的,找到最短的那个字符串,二分枚举长度,然后测试

class Solution {
public:
/**
* @param strs: A list of strings
* @return: The longest common prefix
*/
string longestCommonPrefix(vector<string> &strs) {
// write your code here
string min = "";
int minLen = ~(1 << 31);
int size = strs.size();
if (size == 0) {
return "";
}
for (int i = 0; i < size; ++i) {
if (strs[i].length() < minLen) {
minLen = strs[i].length();
min = strs[i];
}
}
int l = 0;
int r = minLen;
while(l < r) {
int mid = l + (r - 1) / 2;
string temp = min.substr(0, mid);
if (isPrefix(temp, strs)) {
if (!isPrefix(temp + min[mid], strs))
return temp;
else
l = mid + 1;
}
else {
r = mid - 1;
}
}
return min.substr(0, l);
}

bool isPrefix(string str, vector<string> &strs) {
for (int i = 0; i < strs.size(); ++i) {
for (int j = 0; j < str.length(); ++j) {
if (strs[i][j] != str[j]) {
return false;
}
}
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 面试 lintcode