进击的小白Day028——LeetCode刷题笔记004:最长公共前缀

题目来自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;
}
  1. 若出现下图的错误,代表读越界,可能是在读取给定指针或数组的时候出现越界的情况,比如本题中如果给定的strsSize=0,表示strs中没有任何元素,因此也就不存在strs[0][0],一旦在代码中出现就会报错读越界
    进击的小白Day028——LeetCode刷题笔记004:最长公共前缀_第1张图片
  2. 在定义数组存放字符串或数值时,若不确定大小,可以用给定的数组(如本题中strs)的大小来定义,用strlen可以求得strs的大小

你可能感兴趣的:(C语言,LeetCode刷题笔记)