给定一个字符串数组 strs,我们需要找出它们的最长公共前缀。如果不存在公共前缀,则返回空字符串 ""。
示例
示例 1
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2
输入:strs = ["dog","racecar","car"]
输出:""
解释:字符串数组中没有共同前缀,因此返回空字符串。
题目约束
- 数组长度
1 <= strs.length <= 200 - 字符串长度
0 <= strs[i].length <= 200 - 所有字符串均为小写英文字母
1. 横向扫描法
这是最直观的思路。我们将第一个字符串作为初始公共前缀,然后逐一与数组中的其他字符串对比。每次对比后,通过缩减前缀长度来保证它是当前已处理字符串的公共部分。最终剩下的就是所有字符串的最长公共前缀。
代码实现
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) return "";
string prefix = strs[0]; // 初始前缀设为第一个字符串
for (int i = 1; i < strs.size(); ++i) {
int j = 0;
// 比较前缀与当前字符串的公共部分
while (j < prefix.() && j < strs[i].() && prefix[j] == strs[i][j]) {
++j;
}
prefix = prefix.(, j);
(prefix.()) ;
}
prefix;
}
};
{
Solution s;
vector<string> strs = {, , };
cout << s.(strs) << endl;
;
}


