-
题目:
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 -
code
#include <bits/stdc++.h>
using namespace std;
bool check(vector<string> &str, int l, int r) {
string p = str[0].substr(l, r-l+1);
for (int i = 1; i < str.size(); i++) {
if (str[i].substr(l, r-l+1) != p) return false;
}
return true;
}
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int num_str = strs.size();
if (!num_str) return "";
if (num_str == 1) return strs[0];
int min_len = INT_MAX;
for (int i = 0; i < strs.size(); i++) {
min_len = min((int)strs[i].size(), min_len);
}
int l = 0, r = min_len-1, cur;
while (r >= l) {
cur = (l + r) / 2;
if (check(strs, l, cur)) {
l = cur+1;
}
else
r = cur - 1;
}
return strs[0].substr(0, r+1);
}
};