014 最长公共前缀

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z。


实现

C# 实现

  • 状态:通过
  • 118 / 118 个通过测试用例
  • 执行用时: 144 ms, 在所有 C# 提交中击败了 94.92% 的用户
  • 内存消耗: 23.4 MB, 在所有 C# 提交中击败了 11.69% 的用户
public class Solution {
    public string LongestCommonPrefix(string[] strs) 
    {
        if (strs.Length == 0)
            return string.Empty;

        string result = strs[0];
        for (int i = 1; i < strs.Length; i++)
        {
            result = Prefix(result, strs[i]);
            if (string.IsNullOrEmpty(result))
                break;
        }
        return result;        
    }
    
    public string Prefix(string str1, string str2)
    {
        int len1 = str1.Length;
        int len2 = str2.Length;
        int len = Math.Min(len1, len2);
        int i = 0;
        for (; i < len; i++)
        {
            if (str1[i] != str2[i])
                break;
        }
        return i == 0 ? string.Empty : str1.Substring(0, i);
    }    
}

Python 实现

  • 执行结果:通过
  • 执行用时:44 ms, 在所有 Python3 提交中击败了 35.93% 的用户
  • 内存消耗:13.6 MB, 在所有 Python3 提交中击败了 5.14% 的用户
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if len(strs) == 0:
            return ""
        result = strs[0]
        for i in range(len(strs)):
            result = self.Prefix(result, strs[i])
            if result == "":
                break
        return result
        
    def Prefix(self, str1: str, str2: str) -> str:
        len1, len2 = len(str1), len(str2)
        i = 0
        while i < min(len1, len2):
            if str1[i] != str2[i]:
                break
            i += 1
        return "" if i == 0 else str1[0:i]
浙ICP备19012682号