编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
解法一:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int n=strs.size(); // 获取字符串数组的长度
string ans; // 用于存放最长公共前缀的字符串
sort(strs.begin(),strs.end()); // 对字符串数组进行排序,以便比较最小和最大字符串的公共前缀
for(int i=0;i<strs[0].size()&&i<strs[n-1].size();i++){ // 遍历最小字符串和最大字符串的每个字符
if(strs[0][i]==strs[n-1][i]) // 如果当前字符相等,则将其添加到ans中
{
ans+=strs[0][i];
}
else // 如果不相等,则跳出循环
break;
}
return ans; // 返回最长公共前缀
}
};
解法二:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int count = strs.size(); // 获取字符串数组的长度
int length = strs[0].size(); // 获取第一个字符串的长度
for(int i=0; i<length; i++){ // 遍历第一个字符串的每一个字符
char str = strs[0][i]; // 获取第一个字符串的当前字符
for(int j=1; j<count; j++){ // 遍历剩余的字符串数组
if(str != strs[j][i] || i == length){ // 如果当前字符与其他字符串的相同位置的字符不相等,或者已经遍历到第一个字符串的末尾
return strs[0].substr(0,i); // 返回截取的最长公共前缀
}
}
}
return strs[0]; // 返回第一个字符串,即为最长公共前缀
}
};