题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例1
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例2
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
解题思路
- 边界值校验,当数组长度为 0 ,公共前缀为空,直接返回;
- 假设最长公共前缀 prefix 的值为第一个字符串;
- 遍历后面的字符串,依次将其与 prefix 进行比较,两两比较找出公共前缀,最终结果即为最长公共前缀;
- 如果查找过程中出现了 prefix 为空的情况,则公共前缀不存在直接返回;
- 时间复杂度:O(n)。
代码实现
/**
* @author lvxiaodong
* @Classname ArrayCommonPrefix
* @Description 数组最长公共前缀
* @Date 2023/1/3 14:35
*/
public class ArrayCommonPrefix {
public String commonPrefix(String [] arrays){
//边界值校验
if(arrays.length==0){
return "";
}
//假定公共前缀
String prefix = arrays[0];
//遍历数组
for (int i = 1; i < arrays.length; i++) {
//比较假定的公共前缀和当前元素
int j = 0;
for (; j < prefix.length() && j<arrays[i].length(); j++){
if(prefix.charAt(j)!=arrays[i].charAt(j)){
//遍历字符串,比较元素,存在一个元素不等,则跳出字符串循环
break;
}
}
//截取目前最大的公共字符串
prefix = prefix.substring(0,j);
//边界判断
if(prefix.length()==0){
return prefix;
}
}
return prefix;
}
}