LeetCode刷题记录:14.最长公共前缀-2020.04.09

本文记录了LeetCode第14题的解题过程,通过分治法寻找字符串数组的最长公共前缀,并探讨了执行效率及可能存在的问题。
摘要由CSDN通过智能技术生成

LeetCode 14.最长公共前缀

Requirement

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

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

示例

示例 1:
	输入: ["flower","flow","flight"]
	输出: "fl"
示例 2:
	输入: ["dog","racecar","car"]
	输出: ""
	解释: 输入不存在公共前缀。

解题思路1

运用分治法,将数组中的多个字符串分为左右两个子字符串,分别求出左右两侧的最长公共前缀,再进行比对,求出其共同部分,即为原问题的解.

代码
class Solution {
public:
    //使用分治法
    string commonPrefix(string LCPleft, string LCPright)    //判断公共前缀
    {
        string ans = "";
        int lsize = LCPleft.size();         
        int rsize = LCPright.size();
        int minsize = lsize < rsize ? lsize : rsize;    //公共前缀最长只能有LCPleft/LCPright中较短一个串的长度
                                                        //故通过比较来限制循环次数
        for(int i = 0; i < minsize; i++)
        {
            if(LCPleft[i] == LCPright[i])
            {
                ans = ans + LCPleft[i];                 //相同则在ans后加上当前字符
            }
            else return ans;                            //不相同则当前ans即是公共前缀,跳出循环直接返回
        }
        return ans;                                     //每个字符都相等,循环结束,也返回当前ans
    }
    string LCP(int low, int high, vector<string>& strs)     
    {
        if(low == high)
        {
            return strs[low];
        }
        int mid = (low+high)/2;
        string LCPleft = LCP(low, mid, strs);           //左边一组的最长公共前缀
        string LCPright = LCP(mid + 1, high, strs);     //右边一组的最长公共前缀
        return commonPrefix(LCPleft, LCPright);         //对两个子问题的结果再求最长公共前缀即为整个问题的最长公共前缀
    }
    string longestCommonPrefix(vector<string>& strs) 
    {
        int length = strs.size() - 1;
        if(strs.size() == 0)
            return "";
        return LCP(0,length,strs);
    }
};
Assessment

提交记录

Remark

为什么执行用时会这么长呢?分治法不是挺高效的吗?
还是我哪里写的有问题呢?
评论区好像很少有用分治法的…
路漫漫其修远兮,吾将上下而求索…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值