题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
- 输入: ["flower","flow","flight"]
- 输出: "fl"
示例 2:
- 输入: ["dog","racecar","car"]
- 输出: ""
- 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
审题及思路
- 所有输入只包含小写字母 a-z
- 不需要比较的情况有
- 不存在字符串数组,即为null
- 字符串数组长度为0
- 需要从公共前缀与当前元素的0下标的字符开始一直往后比较,当对应位置的字符值不相等时,说明公共前缀只剩下前面那部分了
Java代码
class Solution {
public String longestCommonPrefix(String[] strs) {
// 如果字符串数组为空,直接返回空字符串
if (strs == null || strs.length == 0)
return "";
// comPre用于存储公共前缀,初始化为字符串数组的第一个元素
String comPre = strs[0];
// 逐一比较数组中的每一个元素
for (int i = 1; i < strs.length; i++) {
// 当前比较的字符的下标
int j = 0;
// 只需要比较公共前缀与当前元素中较短的长度的字符
int num = comPre.length() > strs[i].length() ? strs[i].length() : comPre.length();
while (j < num && comPre.charAt(j) == strs[i].charAt(j)) {
// 逐一比较公共前缀与当前元素的前j个字符,相等则检查下一个字符,否则退出循环
j++;
}
// 如果第一个字符就被退出循环,说明没有公共前缀
if (j == 0) {
return "";
} else{
// 否则公共前缀为下标0到j-1的字符串
comPre = comPre.substring(0, j);
}
}
return comPre;
}
}
注: 以上代码不一定是最优解,如果你有更好的想法,快去尝试吧!