编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
第一种解答思路:
以字符串数组中的第1个字符串为最长前缀 prefix
。依次遍历整个字符串数组寻找相同前缀的字符串,如果整个字符串数组中的字符串都包含与最长前缀相同的前缀 prefix
,则直接返回最长前缀 prefix
, 如果遇到不包含相同的前缀的字符串,则将最长前缀 prefix
缩短1个字符,再继续循环比较。
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length <= 0)
return "";
String prefix = strs[0];
boolean flag ;
for(int i = strs[0].length(); i >= 0 ; i --){
flag = true;
for(int j = 1; j < strs.length; j ++){
if(strs[j].indexOf(prefix) != 0){
flag = false;
break;
}
}
if(!flag && prefix.length() > 0)
prefix = prefix.substring(0, prefix.length()-1);
else
return prefix;
}
return "";
}
}
评论区的精选解答:
class Solution {
public String longestCommonPrefix(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);
// 字符串中无前缀相同的情况,prefix 递减到为空字符串
if(prefix.equals(""))
return prefix;
}
}
return prefix;
}
}