多组字符串最长前缀(C语言实现)

最长公共前缀

题目地址:https://leetcode-cn.com/problems/longest-common-prefix/

之所以用c写是因为在用c写程序时需要考虑的东西更多,尤其涉及到指针,经常容易出各种溢出问题,而且c语言常需要自己“造轮子”,有利于加深对数据结构的理解。

 

代码如下:

#include <stdio.h> // printf

#include <stdlib.h> // malloc

#include <string.h> // strlen, strncpy

 

char * longestCommonPrefix(char ** strs, int strsSize){
    int i,j;

    if (strsSize==0 || strlen(strs[0])==0) // ||前后的顺序不能改变
    {
        return "";
    }
    if (strsSize==1)
    {
        return strs[0];
    }
    
    int flag=0;
    for (i = 0; i<strlen(strs[0]); i++)
    {   
        j=1;
        while (j<strsSize)
        {
            if (strlen(strs[j])==i || strs[0][i]!=strs[j][i])
            {
                flag=1;
                break;
            }
            j++;
        }
        
        if (flag==1) break;
    }
    
    char* rev = (char*)malloc(sizeof(char)*(i+1));// 除了申请相同前缀的本身长度,还需要一个位置存'\0'
    strncpy(rev, strs[0], i);// strncpy可能不会再rev末尾加上'\0'来截断
    rev[i]='\0';
    return rev;
}

main(){

    char* strs[3] = {"flower","flow","flight"};

    printf("%s\n", longestCommonPrefix(strs, 3));

    system("pause");

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值