今天看到一个好赞的题目!!!分享一波
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
大佬的解法
执行时间m/s,
时间复杂度:T(n²)
空间复杂度:O(n²)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
// 判断数组是否为空,若为空则返回空值,否则返回数组的第一个元素作为基数
string res = strs.empty() ? "" : strs[0];
for (string s : strs)
/*
获得数组的每一个元素,用find函数获得基数在每一个元素
的首地址,若某一个元素中不存在这个元素或地址不为0,
位数往前进一,此时分为两种情况:
1.若基数为flws,元素为fl,则一次次的while循环往前
进一中是可以找到公共前缀的。
2.若基数为flws,元素为sd,则一次次的while循环往前进一
中仍然找不到最终为0退出循环。
*/
while (s.find(res) != 0) res = res.substr(0, res.length() - 1);
return res;
}
};
其实我个人更喜欢另外一种解法
执行时间0m/s
时间复杂度:T(n)
空间复杂度:O(n)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string res="";
int n=strs.size();
if(n==0)
return res;
if(n<2)
return strs[0];
// 此处对数组进行排序,按照字符a-z从小到大排序
sort(strs.begin(),strs.end());
for(int i=0;i<strs[0].size();i++)
{
// 取第一个和最后一个字符串即可
if(strs[0][i]==strs[n-1][i])
{
res+=strs[0][i];
continue;
}
break;
}
return res;
}
};
是不是很棒!每日研究大佬算法。