编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
例如:char *s[3] = {"adg","adbcja","adcdwad"}; //此为思考时候自己书写的例子用此来讲解程序
char * longestCommonPrefix(char ** strs, int strsSize)
//首先题目很容易理解,来看力扣给的函数,
/*
1.首先函数返回一个指针类型
2.输入的内容第一个是字符串数组用的是指针的指针这点我指针有点不是很熟悉等20号开学去拿C和指针这本书好好看一看!
其次第二个参数是字符串数组的有效个数
我在做题前有时候看不懂力扣给的函数和函数参数的意义,所以希望我也希望看到此文章的你在做题前也要看懂各个参数的含义再下手
*/
{
if (strsSize == 0) //此句很简单,如果字符串数组的个数位0那么直接结束返回空即可
return ;
int sLen = 0,num=0;//sLen为最短长度,num用来存储有效个数
int i=0,j=0;
char string; //string用来临时存放首个也就是字符串的变量用它来一个一个进行比较
sLen= strlen(strs[0]); //首先获取首个字符串长度
for ( i = 1; i< strsSize; i++)//比较如果有比他小的就进行覆盖,为什么这么做
//是因为题目说公共字符串所以公共字符串最大长度<=strs中最短的
//字符串长度
{
if (sLen > strlen(strs[i]))
sLen = strlen(strs[i]);
}
//获取最短长度
for ( i = 0; i < sLen; i++)//如上述我写的例子 最短长度为3所以只要对比3次列即可
{
string = strs[0][i];//获取第一行第i个字符比较,赋值给string
//逐行与第一行字符的第i个进行比较只要有一行的第i个字符不相同那么直接结束整个内外循环
for(j=1;j< strsSize;j++)
if (string != strs[j][i]) { j = -1; break; }
if (j == -1)break;
num++;//只要当前列都相同就加一(i=0+1,1+1,2+1)
}
char* pt = (char*)malloc(sizeof(char)*(num+1));
//创建个指针,指向char*类型的内存大小为:(num+1)* char类型
//必须+1,要为'\0'留一个地方存储方便结束输出
for ( i = 0; i < num; i++)//存入内容
pt[i] = strs[0][i];
pt[i] = '\0';//最后一个地方存入'\0'
return pt;//返回指针
}
就是我发现自己还是很多问题,C语言还是很多知识不牢固,然后思路单一,不知如何下手!针对这点我觉得我应该等20号返校多看看C语言和指针相关的书不然真的是有时候会出错还不知道错哪里!但是看完解析理解了就发现其实很简单,也许我现在还是不能单独的想出来每一道题,都是看完解析以后才可以写出来,但是慢慢加油把 ,我相信以后会有一天能依靠自己的脑子写出来!也许各位可能跟我一样就是感觉看完答案就好像不是自己写的,觉得白弄了,但是我觉得我能看明白整个程序就已经是进步了,我每天还会重新温习一遍前一天做过的题,自己写出来一遍我觉得也算是给自己一个安慰吧,毕竟脑瓜子有点笨,嘿嘿!加油!各位!今天刷题结束了,该去学STM32了/(ㄒoㄒ)/~~