leetcode-13-最长公共前缀

简介: 算法题 leetcode-13-最长公共前缀

最长公共前缀

思路

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

输出:"fl"

由用例可知,每个字符串的长度可能不同,所以可以想到,最长公共前缀一定小于这些字符串中最短的那个,可用minL表示最短长度,即每个字符串只需要遍历到minL - 1即可。在该用例值minL为4,strsSize为3

所以为了判断某个字符是否“公共”,则需要按如下次序判断:

第一趟               第二趟        第三趟

flowerflower    flower

flowflow            flow

flightflight    flight

由上可知,第趟中三个字符串的第个字符都是f,第趟的第个字符都是l,第趟的第个字符出现了不同。

由上句加粗字体可得

第一趟判断的字符为,strs[0][0],strs[1][0],strs[2][0]

第二趟判断的字符为,strs[0][1],strs[1][1],strs[2][1]                    strs[][]

第二趟判断的字符为,strs[0][2],strs[1][2],strs[2][2]

我们一搬遍历都是先行后列,而这次需要先列后行。

因此需要控制列不变,行变。

列数即字符串的长度,则最长公共前缀都小于等于minL。因此可得如下代码。

代码

char*longestCommonPrefix(char**strs, intstrsSize){
//用flag来控制前缀是否已找到,count用于表示前缀的数目,minL表示最短字符串intflag,count=0,minL=200;
for(inti=0; i<strsSize; i++)
if(strlen(strs[i]) <minL)minL=strlen(strs[i]);
for(inti=0; i<minL; i++){
flag=1;
for(intj=0; j<strsSize-1; j++){
//当flag = 0则表明最长公共前缀已经找到if(strs[j][i] !=strs[j+1][i]){
flag=0;
//两个break退出双重for循环break;
            }
        }
//flag = 1则表明strs[i][count]为公共前缀之一if(flag)count++;
elsebreak;
    }
//用'\0'来表示字符串的结束strs[0][count] ='\0';
returnstrs[0];
}

大家若有其他方法,欢迎交流。

相关文章
|
3月前
|
机器学习/深度学习 Java
LeetCode 14. 最长公共前缀
LeetCode 14. 最长公共前缀
47 1
|
3月前
|
Python
leetcode-14:最长公共前缀
leetcode-14:最长公共前缀
34 0
|
10月前
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
35 0
|
3天前
|
算法
LeetCode第14题最长公共前缀
该文章介绍了 LeetCode 第 14 题最长公共前缀的解法,通过取一个字符串作为基准,一列一列字符比较来找出最长公共前缀,时间复杂度为 O(m * n),同时提到也可使用二分查找法,但代码复杂度会上升。
LeetCode第14题最长公共前缀
|
2月前
|
存储 算法 Java
【经典算法】LeetCode14:最长公共前缀(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode14:最长公共前缀(Java/C/Python3实现含注释说明,Easy)
16 1
|
2月前
|
算法
力扣经典150题第二十题:最长公共前缀
力扣经典150题第二十题:最长公共前缀
16 0
|
3月前
【力扣】14. 最长公共前缀
【力扣】14. 最长公共前缀
|
3月前
|
C++ 索引
【力扣经典面试题】14. 最长公共前缀
【力扣经典面试题】14. 最长公共前缀
|
3月前
|
算法 Java
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
30 0
|
3月前
|
Java
LeetCode题解-最长公共前缀-Java
最长公共前缀-Java
14 0