## 题目

> - 题号：14
> - 难度：简单
> - https://leetcode-cn.com/problems/longest-common-prefix/

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

如果不存在公共前缀，返回空字符串 ""。

<b>示例 1</b>:
```c
输入: ["flower","flow","flight"]
输出: "fl"
```

<b>示例 2</b>:
```c
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
```

<b>说明</b>:

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

---
## 实现


**C# 实现**

- 状态：通过
- 118 / 118 个通过测试用例
- 执行用时: 144 ms, 在所有 C# 提交中击败了 94.92% 的用户
- 内存消耗: 23.4 MB, 在所有 C# 提交中击败了 11.69% 的用户


```c
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% 的用户

```python
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]
```

