Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、思路分析:
首先找到长度最小的字符串,默认它为最长公共前缀,然后从它的最后一位开始依次与其它字符串比较,有一次失败就直接去掉这一位,直到第一位。第一位字符额外再循环了一次(由于存在没有公共前缀的情况),条件和上面一样。(感觉优化空间还挺大,但本人现在能力有限,只能做到这步)
三、AC 代码:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int min=-1,min_len = 200, len =strs.size();
for(int i=0;i<len;i++)
{
if(min_len>strs[i].size())
{
min = i;
min_len = strs[i].size();
}
}
string ans = strs[min];
for(int i=min_len-1;i>0;i--)
{
for(int j=0;j<len;j++)
{
if(strs[j][i] == strs[min][i])
continue;
else
{
ans = ans.substr(0,i);
break;
}
}
}
for(int i=0;i<len;i++){
if(strs[i][0]==ans[0])
continue;
else
return "";
}
return ans;
}
};
四、总结:
果然我的方法很挫,看了官方答案,直接给了4种,学习了。