最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
思路
对每一个字符串求得最短长度,取第一个字符串的最短长度为标准,遍历标准字符串的每一位,如果后面的n-1个字符串的对应位是相同的则继续判断,直到n-1个字符串遍历完成或出现不同的位。如果这一位遍历完成则结果加上这一位,否正返回原来的结果。
答案
class Solution {
public:
string longestCommonPrefix(vector<string>& strs)
{
string res="";
if(strs.empty())
{
return res;
}
int min_num = strs[0].size();
for(int i=1;i<strs.size();i++)
{
if(min_num>strs[i].size())
{
min_num = strs[i].size();
}
}
for(int i = 0;i<min_num;i++)
{
char stand = strs[0][i];//第一个string的前min_num位当作是标准
for(int j = 1;j<strs.size();j++)//遍历除掉第一个的剩余的所有字符串
{
if(strs[j][i]==stand)//不全是标准位
{
continue;
}
return res;
}
res += stand;
}
return res;
}
};
注:如果只是简单地取strs[0]的长度作为最短长度,那么当strs[0]的长度不是最短的时,对后面比strs[0]的长度短的string按理说应该出现越界的问题,奇怪的是并没有。。。代码如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string result="";
if(strs.empty())
return result;
int i=0;
while(i<strs[0].size())
{
char temp=strs[0][i];
for(int j=1;j<strs.size();j++)
{
if(strs[j][i]==temp)
continue;
else
return result;
}
result+=temp;
i++;
}
return result;
}
};