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