LeetCode | Longest Common Prefix(最长公共前缀)

题目:

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

求一系列字符串的公共字符串前缀。


题目解析:

没有想到很好的方法,只能一个字符串一个字符串的相比较,最后求得公共字符串。不过题目中还是有很多需要注意的地方的。

1:我如何定义一个字符串数组?char *str[]。其中每个指针都指向一个字符串。但是不能用sizeof()或者strlen来求。其求的知识占据的空间或者字符串长度。需要再函数中显示定义该数组的长度。

2:当数组的个数小于等于0时或者已经确定了字符串为空的时候,应该退出循环函数,返回空串。

3:我们只是用一个下标index表示,最多指向那个位置,而不要另分配数组来保存。在求得最终的index后,才分配空间。


代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 4

char *LongestCommonPrefix(char *str[],int n);


int main()
{
    char *str[MAX] = {"abcdeadb","abcdeadd","abcdedab","abcdeade"};
    char *arr;

    arr = LongestCommonPrefix(str,MAX);
    printf("arr = %s",arr);

    free(arr);
    return 0;
}

char *LongestCommonPrefix(char *str[],int n)
{
    int i,index = strlen(str[0]);

    if(n <= 0)
        return "";
    printf("index = %d\n",index);
    for(i = 1;i < MAX;++i){
        index = index < strlen(str[i]) ? index : strlen(str[i]);
        if(index == 0){
            return "";
        }
        for(int j = 0;j < index;++j){
            if(str[i][j] != str[0][j]){
                index = j;    //index表示个数
                break;
            }
        }
    }

    char *arr = (char *)malloc((index+1) * sizeof(char));
    memcpy(arr,str[0],index);
    arr[index] = '\0';

    return arr;
}




点赞