题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
-
1 <= strs.length <= 200
-
0 <= strs[i].length <= 200
-
strs[i]
仅由小写英文字母组成
我的解题思路:求最小的单个单词组的长度;两重for 循环令第一个字符串与其他字符串做对比,如果不相同,赋值为'\0'。最终返回strs[0]就是公共前缀。
用上面思路打开VS测试
#include <stdio.h>
#include<string.h>
int main()
{
char strs[3][20]= {"abs","abc","abdf"}; //定义一个二维数组:
int strsSize=3,a=0,aa;
//strsSize数组行数 a 最小字符串的下标 aa最小字符串长度
//char str[500];
aa=strlen(strs[0]); //开始令aa等于第一个字符串的长度
for(int k=0;k<strsSize;k++) //进入循环判断让aa最终存储最小字符串长度
{
if(aa>strlen(strs[k]))
{
aa=strlen(strs[k]);
a=k; //将最小字符串的下标赋值给a
}
}
for(int j=0;j<3;j++)
{
for(int k=0;k<aa+1;k++)
{
if(strs[0][k]!=strs[j][k] && j!=0) //两重for 循环令第一个字符串与其他字符串做对比
{
strs[0][k]='\0'; // 如果不相同,赋值为'\0'
}
}
}
printf("%s\n",strs[0]);
return 0;
}
测试当然是结果成功哈!
代入力扣
char* longestCommonPrefix(char** strs, int strsSize) {
int a=0,i=1,aaa=0;
char str[200];
int aa=strlen(strs[0]);
for(int k=0;k<strsSize;k++)
{
if(aa>strlen(strs[k]))
{
aa=strlen(strs[k]);
a=k;
}
}
for(int j=0;j<strsSize;j++)
{
for(int k=0;k<aa+1;k++)
{
if(strs[0][k]!=strs[j][k] && j!=0)
{
strs[0][k]='\0';
}
}
}
return strs[0];
}
成功啦!!!!
看了一下别人的代码和思路,改进了一下VS代码
#include <stdio.h>
#include<string.h>
int main()
{
char strs[3][20]= {"abcd","abcf","abcdf"}; //定义一个二维数组:
int strsSize=3;
//strsSize数组行数 a 最小字符串的下标 aa最小字符串长度
//char str[500];
for(int j=0;j<strsSize;j++)
{
for(int k=0;k<(strlen(strs[0]));k++)
{
if(strs[0][k]!=strs[j][k] && j!=0) //两重for 循环令第一个字符串与其他字符串做对比
{
strs[0][k]='\0'; // 如果不相同,赋值为'\0'
}
}
}
printf("%s\n",strs[0]);
return 0;
}
省去了可以省略的代码,代入力扣,最终代码:
char* longestCommonPrefix(char** strs, int strsSize) {
for(int j=0;j<strsSize;j++)
{
for(int k=0;k<(strlen(strs[0]));k++)
{
if(strs[0][k]!=strs[j][k] && j!=0)
{
strs[0][k]='\0';
}
}
}
return strs[0];
}
成功啦!!!
完事大吉啦!
再接再励吧!!!!!!!
脑袋空空。
如果有错,请赐教,感谢!