[LeetCode-14] Longest Common Prefix(多个字符串公共字符子串查找)

Write a function to find the longest common prefix string amongst an array of strings.

【分析】找出输入的多个字符串的公有前序,简单的逻辑遍历查找就好。
算法流程:
1、判断输入的字符串数量,小于2时候做出相应返回。
2、获取最短字符串的长度。
3、设定标记 same_flag,控制跳出循环,与长度返回的长度 index以及存储好的公共前序。
4、设置字符串结束标志位。

代码:

char* longestCommonPrefix(char **strs, int strsSize)    
{
    if(!strs)
        return NULL;
    if(strsSize==0)
        return "";
    if(strsSize==1)
        return strs[0];
    int strsNum,index = 0;
    int count = 0;
    int min = 0x7fffffff;/*int 最大数*/
    char *longestCommonPrefix = NULL;
    /*1.获取最短的字符串长度*/  
    for(strsNum = 0;strsNum < strsSize; strsNum++) {

        while(*(strs[strsNum]+count)!='\0') {
            count ++;   
        }

        if(count < min) {
            min = count;
        }
        count = 0;
    }
    //printf("[%d] min:%d\n",__LINE__,min);
    /*2.分配地址存储公共字符串*/
    longestCommonPrefix = (char *)malloc(min*sizeof(char));

    int same_flag = 1;
    count = 0;

    for(index = 0;(index < min && same_flag);index++) {

        /*每一个字符串比较*/
        for(strsNum = 0;strsNum < strsSize ; strsNum++) { 

            if(strs[strsNum][index] != strs[0][index]) {
                same_flag = 0;
                if (index == 0) {
                    return "";
                }
            //  printf("[%d] index:%d\n",__LINE__,index);
                index = index-1;
                break;
            }
            else {
                count ++;
            }

            if (count == strsSize ) {
                longestCommonPrefix[index] =  strs[0][index];
                //printf("[%d] index:%d longestCommonPrefix:%c\n",__LINE__,index,longestCommonPrefix[index] );
            }

        }
        count = 0;

    }

    /*3.加一个字符串结束标志位返回*/
    longestCommonPrefix[index] = '\0';

    /*TO DO:隐患,没有释放内存longestCommonPrefix*/
    return longestCommonPrefix;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狂奔的乌龟

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值