提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
查找几个字符串的最长公共前缀
一、题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
二、问题分析
最大公共前缀的长度不会大于其中最短字符串的长度 l e n len len,所以我们先找出最短的字符串的长度,然后纵向遍历字符串依次对比对应的字符是否相同。并记录相同字符的个数,当不相等时跳出循环,将最长公共前缀的后一个位置的字符设为**‘\0’**
三、解决方法
char* longestCommonPrefix(char** strs, int strsSize) {
int len = strlen(strs[0]);
int i=0;
int j=0;
//先找出最短字符串的长度len
for(i=1;i<strsSize;i++)
{
if(strlen(strs[i])<len)
{
len=strs[i];
}
}
//纵向遍历每个字符串的i位置的元素是否相同
for(i=0;i<len;i++)
{
for(j=1;j<strsSize;j++)
{
if(strs[j][i]!=strs[j-1][i]){
break;
}
}
//j不等于strsSize时表示最长公共前缀不是最短字符串,故跳出第二个循环
if(j!=strsSize)
{
break;
}
}
strs[0][i]='\0';
return strs[0];
}
四、总结
上述方法为暴力解决,依次对比每个字符串对应位置的字符是否相同来解决问题。