LeetCode 14. 最长公共前缀

题目描述

🔥 14. 最长公共前缀

image-20230311180835705

思路分析

  1. 首先检查输入的字符串数组是否为空,如果为空,直接返回空字符串。
  2. 取第一个字符串作为参考,逐个字符进行比较。
  3. 对于每个字符,遍历所有字符串,检查它们在该位置的字符是否相同。
  4. 如果发现某个字符不相同,或者到达某个字符串的末尾,则返回当前已匹配的前缀。
  5. 如果所有字符都匹配,则返回整个参考字符串。

参考代码

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),只使用了常量级的额外空间。

🍏 点击查看 Java 题解

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;
    }
}
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/75574694
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!