问题
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""。
示例1:
输入:[“flower”,“flow”,“flight”]
输出:“fl”
示例2:
输入:[“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀
说明:所有输入只包含小写字母a-z。
思路
最简单的方法,从第一个字符串的第一个字符开始,一次对比后面字符串的第一个字符,全部匹配后将这个字符添加到StringBuilder中,继续对比第二个字符,以此类推。
退出条件:
- 当字符匹配不成功
- 字符串长度不同导致按位对比出现了空指针异常
代码实现:
public String longestCommonPrefix(String[] strs) {
StringBuilder sb = new StringBuilder();
try{
//将取第一个元素的操作放入try-catch,当输入为null时,直接返回"",不然报错
String str = strs[0];
for(int i = 0; i<str.length();i++){
//先将c保存下来,避免下一层循环每次都要执行一次charAt()方法
char c = str.charAt(i);
for(int j = 0;j<strs.length;j++){
if(c != strs[j].charAt(i)){
return sb.toString();
}
}
//匹配成功的字符存入StringBuilder
sb.append(c);
}
}catch (Exception e){
return sb.toString();
}
return sb.toString();
}