菜鸡每日一题系列打卡14天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母a-z。
题目分析
本题有很多种解决方法,从最容易想到的水平扫描,到相对比较复杂的建立字典树来进行处理,都可以解决问题。本文采用的是水平扫描的方法,理由是在时间复杂度和空间复杂度均比较可观的前提下,实现比较简单。当然,研究其它解决方法,对思维的活跃非常有意义!
代码实现
class Solution {
public String longestCommonPrefix(String[] strs) {
// 特殊情况处理
if (strs == null || strs.length == 0) {
return "";
}
// 对每一个字符串的同一位置的字符进行扫描
for (int i = 0; i < strs[0].length(); i++) {
for (int j = 1; j < strs.length; j++) {
if (i == strs[j].length() || strs[j].charAt(i) != strs[0].charAt(i)) {
return strs[0].substring(0, i);
}
}
}
// 返回结果
return strs[0];
}
}
代码分析
对代码进行分析,在最坏情况下循环过程是扫描一遍所有的字符,因此,时间复杂度为O(n),n为字符串数组中所有字符串的数组数量之和,就空间而言,仅仅需要固定的几个变量,因此,空间复杂度为O(1)。
执行结果
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到