当前位置: 面试刷题>> 最长公共前缀(经典算法150题)
### 题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,则返回空字符串 `""`。
假设所有输入都是非空字符串。
**示例 1**:
```
输入: ["flower","flow","flight"]
输出: "fl"
```
**示例 2**:
```
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
```
**注意**:本题要求解法需要尽可能地优化性能,特别是在处理大量字符串或非常长的字符串时。
### PHP 示例代码
```php
function longestCommonPrefix($strs) {
if (empty($strs)) return "";
$prefix = $strs[0];
foreach ($strs as $str) {
// 当发现前缀不是当前字符串的前缀时,缩短前缀长度并重新检查
while (strpos($str, $prefix) !== 0) {
$prefix = substr($prefix, 0, -1);
if (empty($prefix)) {
return "";
}
}
}
return $prefix;
}
// 测试
echo longestCommonPrefix(["flower","flow","flight"]); // 输出: fl
echo longestCommonPrefix(["dog","racecar","car"]); // 输出:
```
### Python 示例代码
```python
def longestCommonPrefix(strs):
if not strs:
return ""
prefix = strs[0]
for s in strs:
while not s.startswith(prefix):
prefix = prefix[:-1]
if not prefix:
return ""
return prefix
# 测试
print(longestCommonPrefix(["flower","flow","flight"])) # 输出: fl
print(longestCommonPrefix(["dog","racecar","car"])) # 输出:
```
### JavaScript 示例代码
```javascript
function longestCommonPrefix(strs) {
if (strs.length === 0) return "";
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.slice(0, -1);
if (prefix === "") return "";
}
}
return prefix;
}
// 测试
console.log(longestCommonPrefix(["flower","flow","flight"])); // 输出: fl
console.log(longestCommonPrefix(["dog","racecar","car"])); // 输出:
```
### 文章添加逻辑
在撰写关于这道题的文章时,你可以从以下几个方面入手:
1. **问题引入**:简要介绍最长公共前缀的概念,并说明其在字符串处理中的重要性。
2. **题目解析**:详细解释题目要求,并给出示例输入与输出,帮助读者理解问题。
3. **解法探讨**:
- 介绍几种可能的解法思路,如水平扫描(横向比较)和纵向扫描(从字符位置入手)。
- 分析每种解法的优缺点,并指出哪种解法更适用于本题。
4. **代码实现**:
- 分别给出 PHP、Python、JavaScript 的代码实现,并解释代码逻辑。
- 可以提到性能优化点,比如避免不必要的字符串比较和复制。
5. **总结与扩展**:
- 总结解题思路和关键点。
- 提及一些相关概念或算法,如字符串匹配算法、Trie 树等,以及它们在处理字符串问题时的应用。
- 邀请读者到“码小课”网站学习更多相关内容,参与讨论和练习。
通过这样的结构,你可以撰写出一篇既全面又深入的关于最长公共前缀算法的文章,并在其中自然地融入对“码小课”网站的推广。