leetcode-14最长公共前缀(分治|二分)[通俗易懂]

leetcode-14最长公共前缀(分治|二分)[通俗易懂]原题链接编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,”flow”,”flight”]输出:”fl”示例 2:输入:strs = [“dog”,”racecar”,”car”]输出:””解释:输入不存在公共前缀。 提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成题解分

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

示例 1:

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

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

提示:

0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

题解

  1. 分治,时间复杂度O(mn)
class Solution { 
   
public:
    string com(string a,string b){ 
   
        int len = min(a.size(),b.size());
        int i = 0;
        while(i < len && a[i] == b[i])i ++;
        return a.substr(0,i);
    }
    string div(vector<string> &strs,int l,int r){ 
   
        if(l < r){ 
   
            int mid = l + r >> 1;
            string left = div(strs,l,mid);
            string right = div(strs,mid + 1,r);
            int len = min(left.size(),right.size());
            int i = 0;
            while(i < len && left[i] == right[i])i ++;
            return left.substr(0,i);
        }else return strs[l];
    }
    string longestCommonPrefix(vector<string>& strs) { 
   
        if(!strs.size())return "";
        return div(strs,0,strs.size() - 1);
    }
};
  1. 二分,时间复杂度O(mnlogm)
class Solution { 
   
public:
    bool check(vector<string>strs,int x){ 
   

        for(int i = 0;i <= x;i ++){ 
   
            for(int j = 1;j < strs.size();j ++){ 
   
                if(strs[j][i] != strs[0][i])return false;
            }
        }
        return true;
    }
    int min(int x,int y){ 
   
        return x < y ? x : y;
    }
    string longestCommonPrefix(vector<string>& strs) { 
   
        if(!strs.size())return "";
        int mlen = strs[0].size();
        for(int i = 1;i < strs.size();i ++)mlen = min(mlen,strs[i].size());
        int l = -1,r = mlen - 1;
        while(l < r){ 
   
            int mid = (l + r + 1)>> 1;
            if(check(strs,mid))l = mid;
            else r = mid - 1;
        }
        return strs[0].substr(0,l + 1);
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168988.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • StringUtils 使用

    StringUtils 使用一、StringUtils中isNotEmpty和isNotBlank的区别isNotEmpty(str)等价于str!=null&amp;amp;&amp;amp;str.length&amp;gt;0isNotBlank(str)等价于str!=null&amp;amp;&amp;amp;str.length&amp;gt;0&amp;amp;&amp;amp;str.trim().length&

  • ping命令和tracert命令的作用_ping命令有哪些

    ping命令和tracert命令的作用_ping命令有哪些本文只是总结了两个常用的网络命令的实现原理和一点使用经验说明。这些东西通常都分布在各种书籍或者文章中的,我勤快那么一点点,总结一下,再加上我的一点理解和使用经验,方便大家了解。这些也是很基础的东西,没什么高深的。Ping这个应该大家都会用的吧,最主要的就是检测目标主机是不是可连通。Ping程序实际就是发送一个ICMP回显请求报文(就是请求别人收到这个报文之后回显)给目的主机,并等待回显的ICM…

  • 贝叶斯公式的理解【转】

    贝叶斯公式的理解【转】本文转载自:https://blog.csdn.net/qq_37953276/article/details/79297316作者:知乎用户 链接:https://www.zhihu.com/question/21134457/answer/169523403来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。最近我自己在学习一些关于机器学习的东西,…

  • petalinux vdma 学习笔记

    petalinux vdma 学习笔记在petalinux目录下打开终端,使能petalinux环境配置:sourcesettings.sh新建工程目录,最好是petalinux上一层目录下:cd…mkdir/xilinx/my_zc702_prj/DMI_TM6843在DMI_TM6843下新建硬件配置目录;mkdirhddef将vivado中导出.hdf文件放到hddef目录下5.建立工程:peta…

  • SSL证书绑定成功

    SSL证书绑定成功

    2021年10月14日
  • Lucene 分词 TokenStream 取 Token

    Lucene 分词 TokenStream 取 TokenLucene分词 TokenStream取TokenTokenStreamtokenStream=analyzer.tokenStream("content",newStringReader(text));//TokenStream遍历3.5Strings1="";Strings2="";while(tokenStream.inc…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号