最长公共前缀
- 编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
解题思路
- 1、要找出字符串数组中的最长公共前缀,可以从第一个字符串开始,逐个字符地比较所有字符串相同位置的字符。
- 2、如果字符相同,则继续比较下一个位置;
- 3、如果字符不同或者某个字符串已经比较到了末尾,则返回当前的公共前缀。
Java实现
public class LongestCommonPrefix {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
StringBuilder prefix = new StringBuilder();
int index = 0;
while (true) {
if (index >= strs[0].length()) {
break;
}
char ch = strs[0].charAt(index);
for (int i = 1; i < strs.length; i++) {
if (index >= strs[i].length() || strs[i].charAt(index) != ch) {
return prefix.toString();
}
}
prefix.append(ch);
index++;
}
return prefix.toString();
}
public static void main(String[] args) {
LongestCommonPrefix lcp = new LongestCommonPrefix();
String[] strs1 = {"flower", "flow", "flight"};
System.out.println("Test Case 1:");
System.out.println("Input: [\"flower\", \"flow\", \"flight\"]");
System.out.println("Longest Common Prefix: " + lcp.longestCommonPrefix(strs1)); // Expected: "fl"
String[] strs2 = {"dog", "racecar", "car"};
System.out.println("\nTest Case 2:");
System.out.println("Input: [\"dog\", \"racecar\", \"car\"]");
System.out.println("Longest Common Prefix: " + lcp.longestCommonPrefix(strs2)); // Expected: ""
}
}
时间空间复杂度
- 时间复杂度: 假设数组中有 n 个字符串,每个字符串的平均长度为 m,最长公共前缀的长度不会超过 m。因此,时间复杂度为 O(n*m)。
- 空间复杂度: 使用了 StringBuilder 存储结果字符串,空间复杂度为 O(m),其中 m 是最长公共前缀的长度。