LeetCode题组:第14题-最长公共前缀

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

如果你也这样传递参数,会和我遇到一样的传参问题。这里要注意的是指针的指针,和二维数组的差异;二维数组的地址是连续的,所有成员按顺序排序;而指针的指针只要求指针地址连续,而不要求指针的指针地址连续(有点拗口需要多读几遍)。