持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
一、题目描述:
14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、思路分析:
-
首先,你一定要仔细读题,如果面试的话,需要和面试官确认自己对题目的理解是否正确。
-
然后,你可以看到,是公共前缀,既然是前缀,那么一定是从0开始,否则就不用前缀了。
-
边界条件需要考虑一下。
-
然后可以找出数组中,长度最小的一个,作为你要循环匹配的边界,比如数组长度为3,而数组中长度最小为5,
那么5肯定是最外面的循环结束条件,你想一下,对于charAt(0),你是不是要比较数组中的每一个字符的charAt(0)呢,
那么,自然数组的长度作为里面循环的边界条件。这个应该不难懂的。
-
有了这几点,可以写答案了。
三、AC 代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
int minLen = Integer.MAX_VALUE, len = strs.length, sum = 0;
for (int i = 0; i < strs.length; i++) {
minLen = Math.min(minLen, strs[i].length());
}
for (int i = 0; i < minLen; i++) {
char ch = strs[0].charAt(i);
for (int j = 0; j < len; j++) {
if (strs[j].charAt(i) != ch) return strs[0].substring(0, sum);
}
sum++;
}
return strs[0].substring(0, sum);
}
}
四、总结:
此题虽然是简单题,但是有很多种的方法,我们不能固化思维要多去看看学习学习大佬的解法,比如官方就直接给了4个解法,而我们一般想不到。