1.题目:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: [“flower”,“flow”,“flight”] 输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。
2.我的解答:
#include<stdio.h>
#include<string.h>
//函数申明
char *longestCommonPrefix(char **strs, int strsSize);
char *longestCommonPrefix(char **strs, int strsSize){
//如果字符串数组为空,直接返回""
if(strsSize==0) return "";
//从所有字符串中第一个字符开始比对
for(int i=0;i<strlen(strs[0]);i++){
//依次比较第j个字符串中的第i个字符
for(int j=1;j<strsSize;j++){
//如果比较字符串的第i个字符不同,则直接返回公共前缀
if(strs[0][i]!=strs[j][i]){
strs[0][i]='\0';
return strs[0];
}
}
}
return strs[0];
}
int main(){
char strs[3][10] = {"flaower","flaow","flaight"};
char *str[3];
str[0]=strs[0];
str[1]=strs[2];
str[2]=strs[2];
printf("%s",longestCommonPrefix(str,3));//1号标记点
return 0;
}
3.我遇到的问题
在1号标记点中,我想试着使用下面语句传递参数strs。
printf("%s",longestCommonPrefix(strs,3))//直接使用strs而非str
如果你也这样传递参数,会和我遇到一样的传参问题。这里要注意的是指针的指针,和二维数组的差异;二维数组的地址是连续的,所有成员按顺序排序;而指针的指针只要求指针地址连续,而不要求指针的指针地址连续(有点拗口需要多读几遍)。