编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
解题思路:模拟
这道题模拟的思路有两种,第一种就是每次比较每个字符串同一位置的字符,判断是否相等,如果不相等则返回前面匹配的位置,可以使用 substr() 函数直接实现这块!
另一种思路就是两两字符串进行比较,得到一个最长公共前缀之后,将其与第三个字符串比较,以此类推直到比较了所有字符串之后,得到的结果就是最长的公共前缀了!
两种思路的时间复杂度都是 O(n*m),其中 n 表示的是字符串的个数,m 表示字符串平均字符个数,下面代码我们采用的是第一种思路!
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
// 每次比较每个字符串同一位置的字符
for(int i = 0; i < strs[0].size(); ++i)
{
char tmp = strs[0][i];
for(int j = 1; j < strs.size(); ++j)
{
// 如果某个字符串越界了,或者字符不相等,则直接返回前面匹配的位置
if((i == strs[j].size()) || (strs[j][i] != tmp))
return strs[0].substr(0, i);
}
}
return strs[0];
}
};