leetcode 14. 最长公共前缀

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

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

 leetcode上常见的解法如下,但如果将下面代码放进VS编译时strs[0][j]='\0';这个语句是不能执行的,因为它在修改常量字符串。但leetcode是可以通过的,我也不太明白。我对其做了些改动,如第二个代码块。

char * longestCommonPrefix(char ** strs, int strsSize){//strSize:最长公共前缀
    int i,j;
    if(strsSize==0)
    return "";
    //纵向扫描,一列一列看直到找到有字符不一样的
    for(i=0;i<strsSize;i++)
    {
        for(j=0;j<strlen(strs[0]);j++){
            if(strs[i][j]!=strs[0][j])  //第j列不同,已经找到最长公共前缀
            strs[0][j]='\0';  //保存最长公共前缀
            //strs[0];
        }
    }
return strs[0];
}

作者:cai-niao-yi-ge-9
链接:https://leetcode.cn/problems/longest-common-prefix/solution/by-cai-niao-yi-ge-9-xqpa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 基于以上代码中加入一个数组存放相同的前缀再返回,而不需要修改字符串,不足之处是数组开辟空间会出现浪费。并且由于leetcode的测试例子是连续的调用我这个函数,所以那个静态变量每一次都要用memset置空。

char * longestCommonPrefix(char ** strs, int strsSize){
	int L = strlen(strs[0]);
	static char arr[200];
	for (int i = 0; i<L; i++)
	{
		for (int j = 1; j < strsSize; j++)
		{
			if (strs[0][i] != strs[j][i])
			{
				memset(arr, '\0', sizeof(arr));
				for (int k = 0; k < i; k++)
				{
					arr[k] = strs[0][k];
				}
				return arr;
			}
		}
	}
	return strs[0];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优雅人字拖

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值