题目:
给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;
}
};