2022.7.11今天你刷题了吗?
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
分析:
给定一个字符串数组,你需要确定每个字符串能够找到的最大相同前缀,因此这里的思路就是,每两个进行比较,第一个和第二个得出最长前缀,然后利用这个前缀和第三个进行比较。
解析:
1.暴力法
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string prefix = strs[0];
for (int i = 1; i < strs.size(); i++)
{
prefix = longestCommonPrefix(prefix, strs[i]);
}
return prefix;
}
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);
}
};
2.排序法
先对数组进行排序,由于数组按前序排列,所以只需要判断第一个和最后一个的相同前缀
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
sort(strs.begin(), strs.end());
auto &first = strs.front();
auto &end = strs.back();
int i = 0;
while (i < first.size() && i < end.size() && first[i] == end[i])
{
i++;
}
return string(first.begin(), first.begin() + i);
}
};