14.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

1
2
输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

1
2
3
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

问题:

  1. 在比较各个字符串的前缀中,如果保证数组不越界?最后返回的有几种情况?

Solution

首先以第一个字符串的长度为标准,只有两种情况,比第一个字符串短,或者长,每次在对比其他字符串的字符时,首先确认当前遍历的字符没有超过其长度,如果超过,直接以其最短长度返回前缀,

对于比第一字符串长的情况,如果当最后都相同,那么直接返回第一个字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public String longestCommonPrefix(String[] strs) {
// 遍历第一个字符串的每个字符
for(int i = 0; i < strs[0].length(); i++){
// 获取当前可能的公共前缀
String ans = strs[0].substring(0, i + 1);
// 从第二个字符串开始遍历,判断是否以当前前缀开头
for(int j = 1; j < strs.length; j++){
// 如果不是以当前前缀开头,则返回当前前缀的前一个字符作为最长公共前缀
if(strs[j].startsWith(ans) == false){
return strs[0].substring(0, i);
}
}
}
// 如果遍历完第一个字符串后,仍然没有返回,则第一个字符串本身即为最长公共前缀
return strs[0];
}
}