LeetCode14.最长公共前缀(c语言)

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

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

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

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

说明:所有输入只包含小写字母 a-z 。

解法一

两层循环对比,找到不一致的设置为空,最终返回strs[0],则欠缺若是没有数据的情况,另外写出为空。

char * longestCommonPrefix(char ** strs, int strsSize){
   if(strsSize==0) return "";
    for(int i=1;i

解法二

一层for循环进行行的对比,其中包含列的循环(上一个字母比较完则进行下一个字母比较),得到相同列的个数即为前几位,再重新赋予一个字符串,得到最后输出的前缀字符串。

char * longestCommonPrefix(char ** strs, int strsSize){
if (strsSize == 1)
return strs[0];
char*temp=NULL;//这里需要注意,缩短运行时间需要首先初始化数组
int i, j = 0;

for (i = 0; i < strsSize && strs[i][j] != '\0'; ++i)
//++i和i++在for循环中无差异,但是所占内存不同,++i更小
{
    if (strs[i][j] != strs[i+1][j])
        break;
    if (i == strsSize-2) {
        i = -1;         //第一个字母比较完了,从头开始比第二个
        ++j;
    }
}

temp = (char *)malloc(sizeof(char) * (j+1));

for (i = 0; i < j; i++)
    temp[i] = strs[0][i];
temp[i] = '\0';

return temp;
}

收获:

1、i++和++i有区别,但是在for循环中没有区别,只是所占内存不同,i++是多定义一个变量的,所以最好为++i,所占空间小,运行速度快

2、定义字符串,首先赋予为NULL,再进行空间赋予,可以缩减运行时间。

你可能感兴趣的:(LeetCode学习)