ps:因为笔者也是个刚接触编程语言的菜鸟,所以这里的文章都是拿c语言写的,如果同学们想拿其他语言可以在读懂原理之后用其他语言书写
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
方法一:横向比较(俩个俩个比较)
char* longestCommonPrefix(char** strs, int strsSize)
{
if(strsSize == 0) return"";
if(strsSize == 1) return strs[0]; //只有斜杠零的情况
int i = 0;
int index = 0;
for(i = 1; i < strsSize; i++)//遍历每个字符串
{
for(index = 0; index < strlen(strs[0]) ; index++)//遍历每个字符串的每个字符
{
if(strs[0][index] != strs[i][index])//如果遇到不相同的就赋值斜杠零
{
strs[0][index] = '\0';//慢慢缩小sts[0]与其他字符串相同的部分
break;
}
}
}
return strs[0];
}
方法二:纵向比较(可以通俗的理解为把所有的字符串放一列然后每个字符进行比较)
char* longestCommonPrefix(char** strs, int strsSize)
{
if(strsSize == 0) return"";
if(strsSize == 1) return strs[0];
int i = 0;
int m = 0;//返回字符串的结束位置
int index = 0;
char* ret = (char*)malloc(strlen(strs[0])*sizeof(char));//重新开辟一块空间
for(index = 0; index < strlen(strs[0]); index ++)//遍历字符串的每个字符
{
for(i = 0; i < strsSize; i++)//遍历每个字符串
{
if(strs[0][index] != strs[i][index])
{
ret[m] = '\0';//发现不相同时给字符串‘\0’返回
return ret;
}
}
ret[m] = strs[0][index];//把相同的字符赋值给ret[m]
m++;
}
ret[m] = '\0';
return ret;
}