LeetCode题组:第14题-最长公共前缀
- 2020 年 4 月 8 日
- 筆記
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]=''; 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
如果你也这样传递参数,会和我遇到一样的传参问题。这里要注意的是指针的指针,和二维数组的差异;二维数组的地址是连续的,所有成员按顺序排序;而指针的指针只要求指针地址连续,而不要求指针的指针地址连续(有点拗口需要多读几遍)。