14.最长公共前缀

题目来源:

力扣https://leetcode.cn/problems/longest-common-prefix/题目简介:

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

思路:横向扫描

用一句来描述就是lcp(s1,……sn)=lcp(lcp(lcp(s1,s2),s3),……sn)

用第一个字符串做比较基准,先把第一个字符串和第二个比长度,决出短的后,令i=0,把这个短的和此时j指向的字符串进行比较,用一个while循环找出共同部分,然后再让j往后走一位,然后再把之前那个前两个字符得到的公共部分和此时j指向的字符进行比较长度,然后再比较公共长度。以此类推。

代码实现:

char * longestCommonPrefix(char ** strs, int strsSize){
    char* prefix=strs[0];
    char maxlen=strlen(prefix);//一开始我们是为了用这个prefix存第一个字符串,用maxlen存第一个字符串的长度,便于数字的大小比较。
    int i;
    for(int j=1;j<strsSize;++j){
        int curlen=strlen(strs[j]);
        curlen=maxlen<curlen?maxlen:curlen;//在第一次循环中,到这里maxlen都是储存的第一个字符串的长度。
        i=0;
        while(i<curlen&&strs[j][i]==prefix[i]){
            i++;
        }
        maxlen=i;//到这里maxlen才是真正变成前两个公共前缀的长度
    }
    prefix[maxlen]='\0';//这一步就是使决出来的字符串结尾,保证这个最长公共前缀是一个完整字符串
    return prefix;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值