链接:
力扣https://leetcode-cn.com/problems/longest-common-prefix/
难度简单
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
通过次数818,796 提交次数1,935,894
解题思路:在vector<string>找出最短字符串,最长公共子串不会超过它,用该子串与每一个字符串比较,取最长匹配部分。
代码:
class Solution
{
public:
string longestCommonPrefix(vector<string>& strs)
{
// 空
if (strs.size() == 0)
{
return "";
}
// 题目中表示,长度不会超过200
int len = 65535;
// 字符串数组大小
int slen = strs.size();
// 最短子串索引
int index = 0;
// 求最短字符串
for (int i = 0; i < slen; i++)
{
// 如果存在比len还短的字符串
if (strs[i].size() < len)
{
// 更新索引
index = i;
// 更新最短长度
len = strs[i].size();
}
}
// 公共子串必从最短子串取
string str = strs[index];
for (int i = 0; i < slen; i++)
{
// 本身不用比较
if (i == index)
{
continue;
}
// 从尾部取最长匹配,且长度不会超过len
while (str.compare(0, len, strs[i], 0, len))
{
len --;
}
}
return str.substr(0, len);
}
};
执行用时有点假:
提交结果 | 执行用时 | 内存消耗 | 语言 | 提交时间 | 备注 |
---|---|---|---|---|---|
通过 | 0 ms | 9 MB | C++ | 2022/05/02 19:08 | 添加备注 |