前言
力扣第十四题 最长公共前缀
如下所示:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
一、思路
这一题题目很短,也比较好理解。题目意思比较明确,也不需要简单的总结了。
主要说一下实现的思路,主要分为以下几个步骤:
- 从字符串数组中选择第一个字符串,并从左至右遍历该字符串(如示例 1 中则可选择
"flower"
,并从左至右遍历) - 当发现遍历的当前字符在别的字符串中没有,则返回结果即可(如示例 1 中遍历
"flower"
时,遍历到字符"o"
发现在"flight"
中没有,就可以停止遍历并返回结果"fl"
)
二、实现
这一题就按照前面总结的步骤来即可,两层循环即可解决问题!
代码实现
因涉及到字符串的拼接,所以使用了StringBuilder,防止频繁在常量池中创建对象
tips:需要考虑越界情况,如果出现越界则直接返回结果。(比如当字符串数组为["ab", "a"]
时,当遍历到字符b
时,去看"a" 字符串中有没有该字符时会越界)
public String longestCommonPrefix(String[] strs) {
// 特殊情况
if (strs.length == 0)
return "";
StringBuilder ret = new StringBuilder();
for (int i=0; i<strs[0].length(); i++) {
char tempStr = strs[0].charAt(i);
for (int j=1 ; j<strs.length; j++) {
String temp = strs[j];
// 越界或者字符不相等
if (i + 1 > temp.length() || tempStr != temp.charAt(i)) {
return ret.toString();
}
}
ret.append(tempStr);
}
return ret.toString();
}
测试代码
测试代码如下所示:
public static void main(String[] args) {
String ret = new Number14().longestCommonPrefix(new String[] {"ab", "a"});
System.out.println(ret);
}
结果
三、总结
感谢看到最后,非常荣幸能够帮助到你~♥