题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解题思路
1、寻找出字符串数组中的最短字符,并用min保存.公共最长前缀不可能比数组中最短的字符串还长。
2、选取一个字符串作为对照字符串,用于和其他字符串做比较。从头开始截取对照字符串中的每一个字符,如果能和其他所有字符串中的对应字符相等,则表明是公共字符,
//java代码
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}//如果传入字符串为空则返回空字符串
int min=strs[0].length();//寻找出字符串数组中最短字符串长度
for (int i = 1; i <strs.length ; i++) {
min=Math.min(strs[i].length(),min);
}
StringBuilder ref=new StringBuilder();//创建可变的字符序列保存结果
boolean flag=true;
for (int i = 0; i <min&&flag ; i++) {//从首位开始向后截取字符,
String strings=strs[0].substring(i,i+1);//选用数组中第一个字符串作为对照字符串,并从头开始截取出字符
for (int j = 1; j <strs.length; j++) {//和数组中其他每一个字符串做对比
if (!strings.equals(strs[j].substring(i,i+1))) {//如果不相等,falg倒下,跳出循环
flag=false;
break;
}
}
if (flag) {//flag未倒下,表明字符strs[0].substring(i,i+1)和strs[Other].substring(i,i+1)相等
ref.append(strings);//将strings添加到ref尾部
}
}
return ref.toString();//返回结果
}