编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
第一种解法(自己写的):愚笨的暴力破解法
//当传入的数组只有一个数时,公共前缀就是他自己
if (strs.length == 1){
return strs[0];
}
//当传入的数组的长度为0时,公共前缀为空
if (strs.length == 0){
return "";
}
String result = "";
int i = 0;
//一直循环拿出数组中每个值的第一个字符,然后是第二个字符,然后依次比较
while (true) {
//中间字符串cur,用来存储第一个数组第一个值的第i个字母
String cur = "";
for (String str : strs) {
//防止substring截取字符超出范围限制
if (i + 1 <= str.length() && cur.equals("")) {
cur = str.substring(i, i + 1);
//当第i个值互相比较不同的话返回result
} else if (i + 1 > str.length() || !cur.equals(str.substring(i, i + 1))) {
return result;
}
}
result += cur;
i++;
}
第二种解法:参考leetcode上大佬的解法
//同样,当传入的数组长度为0时公共前缀一定是空
if (strs.length == 0){
return "";
}
else{
//存入数组第一个值
String common_prefix = strs[0];
for (String str: strs){
//遍历数组的所有值,遍历出的值实现indexOf方法判断是否包含common_prefix,如果包含
//且在该遍历出的值的第一位上,则公共前缀不变,如果包含,则从末尾一位一位的删除
//common_prefix的值直到可以包含,如果删到空都不包含,则公共前缀是空的
while (str.indexOf(common_prefix) != 0) {
common_prefix = common_prefix.substring(0, common_prefix.length() - 1);
if (common_prefix.isEmpty())
return "";
}
}
return common_prefix;
}