题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
解题思路
方法一
-
在方法中,先检查输入的字符串数组是否为空,如果为空则直接返回空字符串
""
。 -
将数组中的第一个字符串作为初始的公共前缀
prefix
。 -
遍历字符串数组中的每个字符串
str
,并与当前的公共前缀prefix
进行比较。 -
在内部循环中,使用
while
循环来判断当前字符串str
是否以当前公共前缀prefix
开头,如果不是,则执行下面的操作。 -
在内部的
while
循环中,首先检查如果当前公共前缀prefix
已经为空,则直接返回空字符串。 -
如果当前字符串
str
不以当前公共前缀prefix
开头,则将公共前缀逐渐缩短,即将最后一个字符去掉,直到当前字符串以当前公共前缀开头或者公共前缀为空。
class Solution {
public String longestCommonPrefix(String[] strs) {
// 如果字符串数组为空,则返回空字符串
if(strs.length == 0) {
return "";
}
// 公共前缀比所有字符串都短,选择数组中的第一个字符串作为初始公共前缀
String prefix = strs[0];
// 遍历字符串数组,逐个与当前公共前缀进行比较
for (String str : strs) {
while (!str.startsWith(prefix)) {
// 如果当前字符串不以当前公共前缀开头,则将公共前缀逐渐缩短
if (prefix.length() == 0) {
return ""; // 如果公共前缀为空,则直接返回空字符串
}
prefix = prefix.substring(0, prefix.length() - 1);
}
}
return prefix; // 返回最长的公共前缀
}
}