前言
本文介绍了 LeetCode 第 14 题 , "Longest Common Prefix ", 也就是 “最长公共前缀” 的问题.
本文使用 C# 语言完成题目,介绍了1种方法供大家参考。
题目
English
LeetCode 14. Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
Example 1:
Input: [“flower”,“flow”,“flight”]
Output: “fl”
Example 2:
Input: [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.
Note:
All given inputs are in lowercase letters a-z.
中文
LeetCode 14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
解决方案
本文给出了1种解决方法。更多的解法可以参考官方题解。
想象一下,每个单词占一行,左对齐,一条竖直的红色激光从左向右扫描,若扫描到一列的字母不全相同,则停止并输出结果即可。
参考代码:
public string LongestCommonPrefix(string[] strs)
{
if (strs.Length == 0) return "";
int p = 0;
while (true)
{
if (strs[0].Length <= p) break;
bool allSame = true;
for (int i = 1; i < strs.Length; i++)
{
if ((strs[i].Length <= p) || (strs[i][p] != strs[0][p]))
{
allSame = false;
break;
}
}
if (allSame) p++;
else break;
}
return strs[0].Substring(0, p);
}
执行结果
执行结果 通过。 执行用时: 108ms, 内存消耗 24.6M
复杂度分析
时间复杂度:O(S)
S表示strs中所有字符数量之和。 更进一步,可以认为是 O( len(strs) * min(len(item)) ),即字符串数量与最短字符串长度的乘积。
空间复杂度:O(1)
常数个变量。
参考资料汇总
题目:
https://leetcode-cn.com/problems/longest-common-prefix/
官方题解: