题目来自LeetCode。
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
贴代码:
char* longestCommonPrefix(char **strs, int strsSize) {
char *comm = "";
char tmp = '0';
int i = 0, j = 0, n = 0, len = 0, min = 2147483647;
if (strsSize == 0)
{
return comm;
}
else if (strsSize == 1)
{
return strs[0];
}
for (i = 0; i < strsSize; i++)
{
len += strlen(strs[i]);
if (min > strlen(strs[i]))
{
min = strlen(strs[i]);
}
}
if (min == 0)
{
return comm;
}
comm = (char *)malloc(sizeof(char) * len);
memset(comm, 0, sizeof(char) * len);
for (i = 0; i < strsSize; i++)
{
n = (n > strlen(strs[i])) ? n : strlen(strs[i]);
}
for (i = 0; i < n; i++)
{
tmp = strs[0][i];
for (j = 1; j < strsSize; j++)
{
if (tmp != strs[j][i])
{
break;
}
}
if (j == strsSize)
{
comm[i] = tmp;
}
else
{
break;
}
}
return comm;
}
- 若出现下图的错误,代表读越界,可能是在读取给定指针或数组的时候出现越界的情况,比如本题中如果给定的strsSize=0,表示strs中没有任何元素,因此也就不存在
strs[0][0]
,一旦在代码中出现就会报错读越界
- 在定义数组存放字符串或数值时,若不确定大小,可以用给定的数组(如本题中strs)的大小来定义,用strlen可以求得strs的大小