目录
1. 思路
2. 解题方法
3. 复杂度
4. Code
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
1. 思路
要找到字符串数组中的最长公共前缀,可以将第一个字符串作为基准,然后依次比较后续字符串与基准字符串的每个字符,直到遇到不同的字符或者遍历完所有字符串。
2. 解题方法
- 如果输入数组为空或长度为 0,直接返回空字符串。
- 将第一个字符串设为基准字符串。
- 遍历基准字符串的每个字符:
- 在遍历每个字符之前,检查其他字符串是否已经遍历到末尾或者当前字符不与基准字符串的对应字符相等,如果是,则返回基准字符串的前缀部分。
- 否则,将基准字符串的当前字符与其他字符串的当前字符进行比较,如果不相等,则返回基准字符串的前缀部分。
- 如果遍历完基准字符串的所有字符,返回基准字符串本身作为最长公共前缀。
3. 复杂度
- 时间复杂度:假设字符串数组中共有 n 个字符串,每个字符串的平均长度为 m,则时间复杂度为 O(n*m)。
- 空间复杂度:O(1),只需要常数级别的额外空间。
4. Code
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String prefix = strs[0]; // 将第一个字符串设为基准字符串
for (int i = 0; i < prefix.length(); i++) {
char c = prefix.charAt(i);
// 检查其他字符串是否已经遍历到末尾或者当前字符不与基准字符串的对应字符相等
for (int j = 1; j < strs.length; j++) {
if (i == strs[j].length() || strs[j].charAt(i) != c) {
return prefix.substring(0, i); // 返回基准字符串的前缀部分
}
}
}
return prefix; // 返回基准字符串本身作为最长公共前缀
}
}
这段代码通过遍历基准字符串的每个字符,并逐个与其他字符串的对应字符进行比较,实现了查找字符串数组中的最长公共前缀的功能。
欢迎大家留言讨论。
(一份Java面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)