最长公共前缀(leetcode简单篇第十四题)

ps:因为笔者也是个刚接触编程语言的菜鸟,所以这里的文章都是拿c语言写的,如果同学们想拿其他语言可以在读懂原理之后用其他语言书写

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

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

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”

示例 2:

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

方法一:横向比较(俩个俩个比较)

char* longestCommonPrefix(char** strs, int strsSize)
{     
    if(strsSize == 0) return"";
    if(strsSize == 1) return strs[0]; //只有斜杠零的情况
    int i = 0;
    int index = 0; 
    
    for(i = 1; i < strsSize; i++)//遍历每个字符串
    {
        for(index = 0; index < strlen(strs[0]) ; index++)//遍历每个字符串的每个字符
        {
            if(strs[0][index] != strs[i][index])//如果遇到不相同的就赋值斜杠零
            { 
                strs[0][index] = '\0';//慢慢缩小sts[0]与其他字符串相同的部分
            break;
            }
               
        }
    }
    return strs[0];
    
}

方法二:纵向比较(可以通俗的理解为把所有的字符串放一列然后每个字符进行比较)

char* longestCommonPrefix(char** strs, int strsSize)
{     
    if(strsSize == 0) return"";
    if(strsSize == 1) return strs[0]; 
	int i = 0;
	int m = 0;//返回字符串的结束位置
	int index = 0;
	char* ret = (char*)malloc(strlen(strs[0])*sizeof(char));//重新开辟一块空间
	for(index = 0; index < strlen(strs[0]); index ++)//遍历字符串的每个字符
	{
		for(i = 0; i < strsSize; i++)//遍历每个字符串
		{
			if(strs[0][index] != strs[i][index])
			{
				ret[m] = '\0';//发现不相同时给字符串‘\0’返回
				return ret;
			}
		}
		ret[m] = strs[0][index];//把相同的字符赋值给ret[m]
		m++;
	}
	ret[m] = '\0';
	return ret; 
    
}

猜你喜欢

转载自blog.csdn.net/lucky52529/article/details/84303113