题目描述:
解题思路:
本题自己没能想出思路,原因1:不知道char ** 的使用,练习的题量太少。
借鉴大佬:
1:深入 char * ,char ** ,char a[ ] ,char a[] 内核*
https://blog.csdn.net/daiyutage/article/details/8604720
2:最长公共前缀(C语言版)
https://blog.csdn.net/a_ha_____/article/details/120812962
3:最长公共前缀(C语言版)
https://blog.csdn.net/guolizw/article/details/123382519
1:代码为:
char * longestCommonPrefix(char ** strs, int strsSize){
int num=0,str=0,i;
char string;
str=strlen(strs[0]);
for( i=1;i<strsSize;i++){
if(str>strlen(strs[i])){
str=strlen(strs[i]); //找出字符串数组中长度最短的字符串
}
}
for(int j=0;j<str;j++){
string=strs[0][j];
for(int i=1;i<strsSize;i++){ //利用循环找出相同的部分
if(strs[i][j]!=string){
j=-1;
break;
}
}
if(j==-1){
break;
}
num++;
}
char *S=(char*)malloc(sizeof(char)*(num+1)); //动态分配内存的时候一定要预留结束符'\0'的位置!
for( i=0;i<num;i++){ //不然出现输出越界的情况!!
S[i]=strs[0][i];
}
S[i]='\0';
return S;
}
2:代码为:
char * longestCommonPrefix(char ** strs, int strsSize){
if(strsSize==0){
return "";
} //判空
int i=0,j=0; //i代表第i列,j代表第j行
char flag=strs[0][i];
while(flag){
for(j=1;j<strsSize;j++){
if(strs[j][i]!=flag) break; //遇见存在不同,跳出循环。
}
if(j<strsSize) break; //表示即使还有字符串没有判定,但是已经存在同列不同元素,跳出
flag=strs[0][++i];
}
strs[0][i]='\0';
return strs[0];
}