题目描述:
编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ""
。并且我们假设:
- 所有输入只包含小写字母
a-z
。 - 需考虑数组为空的情况。
示例:
输入: ["flower","flow","flight"] 输出: "fl"
输入: ["dog","racecar","car"] 输出: ""
输入: ["java","javascript","json"] 输出: "j"
方法分析:
在分析此类问题,我们的思路应该大致如下:
- 如果字符串数组为空,我们就直接返回一个空字符串。
- 如果字符串数组只有一项,如["java"],那么就直接返回该字符串即可。
- 如果字符串数组有多项,我们可以先取得第一项,然后再依次将第一项字符串的每个字符与后面每一个字符串的相应位置的字符进行比较;如果有不同,就不再进行后续判断,而是直接返回结果即可;如果在这一轮迭代中相应位置的字符相同,则记录下来。
下面我们以 ["flower","flow","flight"] 为例,图解执行过程:
蓝色线表示第一次循环比较,找到相同的“f”并记录下来;红色线表示第二次循环比较,找到相同的“l”并记录下来;黄色线表示第三次循环比较,因为“flight”中的“i”不等于“flower”中的“o”,故终止循环并返回“fl”。
代码实现:
var longestCommonPrefix = function(strs) {
var firstStrs = strs[0];
var result ='';
if(!strs.length){
return result;
}
for (var i = 0; i < firstStrs.length; i++) {
for (var j = 1; j < strs.length; j++) {
if(firstStrs[i] != strs[j][i]){
return result;
}
}
result += firstStrs[i];
}
return result;
};
代码解析:
该代码通过两层循环来得到最终内容,每一次外层循环都可以得到一个相同的字符串(如果有的话)。
该算法的时间复杂度为O(n * n),空间复杂度为O(1)。
相关链接:
https://leetcode-cn.com/problems/longest-common-prefix/description/