编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
方法1:两层循环逐个比较,注意循环条件!
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty()) return "";
for(int i=0;i<strs[0].size();++i) //第一层循环必须用来比较所有字符
{
for(int j=1;j<strs.size();++j) //第二层用来比较所有组
{
if(strs[j][i] != strs[0][i]) //只有所有组字符比较结束后才能比较下一个字符
return strs[0].substr(0,i);
}
}
return strs[0];
}
};
方法2:求出最短字符串进行对比,设置临时字符变量进行比对;
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty()) return "";
int min;
for(int i = 0;i < strs.size();++i) //找出最短字符用来比较
{
if(strs[i].size() < min)
{
min = strs[i].size();
}
}
string s;
int j;
for(j = 0;j < min;++j)
{
//设置一个迭代器k遍历用来遍历所有组数
vector<string>::iterator k = strs.begin();
char c = (*k)[j];
while(k < strs.end())
{
if(c == (*k)[j])
{
k++;
}
else
return s;
}
s += c;
}
return s;
}
};
Tips:string类型转char *
string s;
char *p = "hello";//直接赋值
s = p;
但是要注意在打印s时候不能直接打印 [需要首地址]