LeetCode 14. 最长公共前缀

112 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: strs = ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[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种,学习了。

范文参考:

最长公共前缀 - 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)

画解算法:14. 最长公共前缀 - 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)