题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution {
public:
string longestCommonPrefix(const string& str1, const string& str2) {
int length = min(str1.size(),str2.size());
int index = 0;
while (index < length&&str1[index]==str2[index]) {
index++;
}
return str1.substr(0,index);
}
string longestCommonPrefix(vector<string>& string_vector) {
if (!string_vector.size()) {
return "";
}
string prefix = string_vector[0];
for (int i = 1; i < string_vector.size(); i++) {
prefix = longestCommonPrefix(prefix, string_vector[i]);
if (!prefix.size()) {
break;
}
}
return prefix;
}
};
vector<string> split(string para) {
vector<string> p;
while (para.find(",") != string::npos) {
int found = para.find(",");
p.push_back(para.substr(0,found));
para = para.substr(found + 1);
}
p.push_back(para);
return p;
}
int main() {
string input;
getline(cin, input);
vector<string> string_vector = split(input);
Solution a;
string ans;
ans = a.longestCommonPrefix(string_vector);
cout << ans << endl;
}
复杂度分析
时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
空间复杂度:O(1)。使用的额外空间复杂度为常数。