您的位置:首页 > 其它

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

2014-07-06 21:05 471 查看
题目:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: