编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-common-prefix
以下是官方正解:
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0){
return "";
}
int strLength = strs[0].length();
int count = strs.length;
for (int i = 0; i < strLength; i++){
char ch = strs[0].charAt(i);
for (int j = 1; j < count; j++){
// 以下是踩的小坑,当时想先拿到数组第j个位置的第i个元素,
// 然后再去比较,但是忽略了strs第j个位置的字符串长度会小于strs第0个位置的字符串长度,导致运行报错。
// char tempChar = strs[j].charAt(i);
// 针对这种数据情况,一定要考虑好是否会越界的情况!!!!!
if (i == strs[j].length() || strs[j].charAt(i) != ch){
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
多记录一点:工作中遇到的一个小bug
一个List数组,多线程去执行操作,往数组中添加元素
List<Object> list = new ArrayList();
EXECUTOR_SERVICE.exe(() -> {
list.add("需要添加的对象");
});
// 添加完毕后,对list中的元素进行操作
for(Object obj : list){
// 直接对obj.方法名,产生NPL问题
}
由于List是非线程安全的,多线程情况下,往list中添加元素,容易导致list中某个位置的元素为null,当对list中元素进行遍历时,易产生空指针问题,因此,需要对list中元素先判断是否为null,如果为null,直接continue。