题目描述
Write a function to find the longest common prefix string amongst an array of strings.
大意就是寻找字符串数组中所有字符的最大公共子串。
思路比较简单:就是通过遍历来判断是否所有字符均相同。
实现代码如下:
int findMinStrLen(char **strs,int strsSize){
if(strs==NULL||strsSize<1){
return NULL;
}
int minLen=strlen(strs[0]);
for(int i=1;i<strsSize;i++){
int len=strlen(strs[i]);
if(minLen>len){
minLen=len;
}
}
return minLen;
}
//检查长度为strsSize的字符串数组strs中在index下标是否全部相同
bool sameAllStrs(char **strs,int strsSize,int index){
if(strs==NULL||strsSize<1||index<0){
return false;
}
char ch=strs[0][index];
for(int i=1;i<strsSize;i++){
char temp=strs[i][index];
if(ch!=temp){
return false;
}
}
return true;
}
char* longestCommonPrefix(char** strs, int strsSize) {
if(strs==NULL||strsSize<1){
return "";
}
//寻找最长的公共字符前缀,通过遍历即可
//先确定最短的字符串的长度。
int minLen=findMinStrLen(strs,strsSize);
int index=0;//用来保存有多少个相同的字符
while(index<minLen){
if(sameAllStrs(strs,strsSize,index)){
index++;
}
else{
break;
}
}
if(index==0){//这种情况没有相同的
return "";
}
//将前index个字符取出来,并输出,注意最后一位要放入字符'\0'才行
char *str=(char *)malloc((index+1)*sizeof(char));
for(int i=0;i<index;i++){
str[i]=strs[0][i];
}
str[index]='\0';
return str;
}