最长公共前缀_LeetCode08
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
- 示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
- 示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解题思路
- 根据字符串数组中的每一个字符串依次比较前缀是否相同,从而得到最长公共前缀的长度。
代码
public String longestCommonPrefix(String[] strs) {
//1.先找到最短字符串
int minLength = 0;
for(int i = 0;i < strs.length;i++){
if(i == 0){
minLength = strs[0].length();
}
if(minLength > 0 && minLength > strs[i].length()){
minLength = strs[i].length();
}
}
if(minLength == 0){
return "";
}
int lastIndex = 0;
boolean flag = true;
//2.根据最短的字符串来进行依次循环判断
for (int i = 0; i < minLength; i++) {
Character currentChar = null;
for(int j = 0;j < strs.length;j++){
if(currentChar == null){
currentChar = strs[j].charAt(i);
continue;
}
if(!currentChar.equals(strs[j].charAt(i))){
flag = false;
}
}
if(!flag){
break;
}else{
lastIndex++;
}
}
if(lastIndex == 0){
return "";
}
return strs[0].substring(0,lastIndex);
}
官方思路
public String longestCommonPrefix1(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++){
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
}
return prefix;
}
官方解题思路有很多种,这里展示第一种感觉十分巧妙。
- 获取到数组中的第一个字符串
- 第一个字符串和第二个字符串相互比较,通过indexOf得出用第一个字符串作为前缀是否满足。从而得到第一个字符串和第二个字符串的公共前缀字符串
- 在将第三个字符串拿来和公共字符串前缀作为对比,从而得到这次计算以后的公共字符串