1. 程式人生 > >LeetCode | Longest Common Prefix(最長公共字首)

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;
}