题目详情
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
——题目难度:简单
C++解题
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string ans = "";
if(strs.size() == 0) return ans;
sort(strs.begin(), strs.end());
for(int i=0;i<strs[0].size();i++)
{
char temp = strs[0][i];
int j;
for(j=1;j<strs.size();j++)
{
if(temp != strs[j][i]) break;
}
if(j >= strs.size()) ans += temp;
else break;
}
return ans;
}
};
C解题
char * longestCommonPrefix(char ** strs, int strsSize){
int i,j,k;
char *cp = NULL ;
//char *cp1="";
if(!strsSize) //空数组情况
return "";
for(j=0; *(*strs+j) != '\0'; j++)
{
for(i=1; i<strsSize ;i++)
{
if( *(*(strs+i)+j) != *(*strs+j) ){
if(j==0)
return "";
else
{ cp = (char *)malloc(sizeof(char)*(j+1));
for(k=0;k<j;k++)
{
cp[k]=*(*strs+k);
}
cp[k]='\0';
return cp;
}
}
}
}
cp = (char *)malloc(sizeof(char)*(j+1));
for(k=0;k<j;k++)
{
cp[k]=*(*strs+k);
}
cp[k]='\0';
return cp;
}
看了看以前用C解题的代码,发现有点繁长(但出奇的快?!),对比下现在写的C++代码,感觉有很多感悟呀。