题目如下:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
解题思路:
这道题的示例误导性极强,让我以为只有固定三个输入,结果最后执行它会给出只有两个成员的数组。当我修改完之后,又出现了四个成员的数组,体会一下我当时的绝望。
首先看我之前错误的代码
var longestCommonPrefix = function(strs) {
if (strs == null || strs.length == 0)
{
return "";
}
var len1=0;
var len2=0
var len3=0; 这个地方我是默认他只有三个以内的测试用例,所以遭重了。应该先判断数组的长度,然后给如新变量j再去读入数组成员字符串的长度。
if(strs[0]!=null)
{
len1=strs[0].length;
}
if(strs[1]!=null)
{
len2=strs[1].length;
}
if(strs[2]!=null)
{
len3=strs[2].length;
}
minlen=len1;
var real=0;
if(len2<minlen) 确定最短字符长度,因为前缀不可能超过字符串本身
{
minlen=len2;
}
if(len3<minlen&&len3!=0)
{
minlen=len3;
}
if(strs[1]==null&&strs[2]==null)
{
return strs[0];
}
if(strs[2]==null)
{
for(var i=1;i<=minlen;i++)
{
if(strs[0].substring(0,i)==strs[1].substring(0,i)) substring方法就是获取从x到y的字符串比如“”flower“” 0,1就是”f”
{
real=i;
}
}
return strs[0].substring(0,real);
}
else
{
for(var i=1;i<=minlen;i++)
{
if(strs[0].substring(0,i)==strs[1].substring(0,i))
{
if(strs[1].substring(0,i)==strs[2].substring(0,i))
{
real=i;
}
}
}
return strs[0].substring(0,real);
}
};