- 最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母 a-z 。
- 自己写了一个多小时写好了,但提交总是卡住,有bug找了半天没找到(折腾了两个小时),暂时放弃。
- 以下是正解,和我的思路也差不多,不过分的比较细,没有出bug
char *longestCommonPrefix(char **strs, int strsSize)
{
if (strsSize == 0)
{
return "";
}
if (strsSize == 1)
return *strs;
int len = 0;
for (int i = 0; i < strlen(strs[0]); i++)
{
if (strs[0][i] == strs[1][i] && strs[0][i]!='\0')
len++;
else
break;
}
for (int i = 1; i < strsSize - 1; i++)
{
if(len>strlen(strs[i+1]))
len = strlen(strs[i + 1]);
for (int j = len - 1; j >= 0; j--)
{
if (strs[i][j] != strs[i + 1][j])
len = j;
}
if (len == 0)
break;
}
char *result = (char *)malloc((len + 1) * sizeof(char));
strncpy(result, strs[0], len);
result[len] = '\0';
return result;
}
char * longestCommonPrefix(char ** strs, int strsSize){
int n=0,tag;
char *a=NULL;
if(strsSize==0) return "";
for(int j=0;(*(strs))[j]!='\0';j++)
{
for(int i=1;i<strsSize;i++)
{
if((*(strs))[j]==(*(strs+i))[j])
{
tag=1;
}
else tag=0;
}
if(tag==1)
{
a=(char *) realloc(a, sizeof(char)*(n+1));
a[n]=(*(strs))[j];
n++;
}
else
{
if(n==0) return "";
else
{
a[n]='\0';
break;
}
}
}
return a;
}