Write a function to find the longest common prefix string amongst an array of strings.
Solution
一开始只想到从左到右横扫一遍,却没想到 divide and conquer
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty()) return "";
string comp = strs[0];
for( int i = 1; i < strs.size(); i++ ){
if(strs[i].size() < comp.size()) comp = strs[i];
}
int left = 0, right = comp.size() - 1;
while( left <= right ) {
int mid = (left + right) / 2;
bool flag = false;
for (string str : strs) {
if(str == comp) continue;
if(str.substr(0, mid +1) != comp.substr(0, mid + 1)) {
right = mid - 1; flag = true; break;
}
}
if(!flag) left = mid + 1;
}
return right == -1 ? "" : comp.substr(0, right + 1);
}
};