LeetCode | Longest Common Prefix(最長公共字首)
阿新 • • 發佈:2019-02-13
題目:
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; }