LeetCode 14. 最长公共前缀
题目描述
思路分析
- 首先检查输入的字符串数组是否为空,如果为空,直接返回空字符串。
- 取第一个字符串作为参考,逐个字符进行比较。
- 对于每个字符,遍历所有字符串,检查它们在该位置的字符是否相同。
- 如果发现某个字符不相同,或者到达某个字符串的末尾,则返回当前已匹配的前缀。
- 如果所有字符都匹配,则返回整个参考字符串。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func longestCommonPrefix(strs []string) string {
if len(strs) == 0 {
return ""
}
// 取第一个字符串作为参考
pre := strs[0]
// 遍历每个字符
for i := 0; i < len(pre); i++ {
// 遍历所有字符串
for j := 1; j < len(strs); j++ {
// 如果当前字符不相同,或者到达某个字符串的末尾
if i >= len(strs[j]) || strs[j][i] != pre[i] {
return pre[:i] // 返回当前已匹配的前缀
}
}
}
return pre // 返回整个参考字符串
}
- 时间复杂度:O (n * m),其中 n 是字符串的数量,m 是最短字符串的长度。在最坏情况下,我们需要比较每个字符。
- 空间复杂度:O (1),只使用了常量级的额外空间。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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++) {
for (int j = 1; j < strs.length; j++) {
if (i >= strs[j].length() || prefix.charAt(i) != strs[j].charAt(i)) {
return prefix.substring(0, i);
}
}
}
return prefix;
}
}
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用