题目
https://leetcode-cn.com/problems/longest-common-prefix/
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
题解
char * longestcommonprefix(char ** strs, int strssize)
{
int i, j;
char *ans = NULL;
if(strssize == 0) {
ans;
}
ans = (char *)malloc(200 + 1); //200:字符串最大长度; +1: 字符串尾预留'\0'
// 取第一个字符串复制给ans, 以ans为基线,从第2个字符串开始,每个字符串与ans比较:
// 如果出现不字符不相等,则给ans当前位置设置'\0',然后ans作为新的基线继续和后续字符串比较
// 每次ans刷新后判断下: 如果ans已经为空,则公共前缀已经为0,直接返回;
// 如果对比完所有字符串,则最后ans即为最长公共前缀
strcpy(ans, strs[0]);
for(i = 1; i < strssize; i++){
for(j = 0; ans[j] != '\0' && strs[i][j] != '\0'; j++){
if(ans[j] != strs[i][j]){
break;
}
}
ans[j] = '\0';
if(ans == NULL){
return "";
}
}
return ans;
}
//-------------------------------------------------------------------------------------
//test:
void printStrArray(char ** strArray, int strssize)
{
int i;
if (strssize == 0) {
return;
}
for (i = 0; i < strssize; i++) {
printf("%s\n", strArray[i]);
}
return;
}
int main()
{
int len;
char *pTmp = NULL;
char *pStrArray[] = {"flower",
"flow",
"flight"
};
len = sizeof(pStrArray)/sizeof(char *);
printf("before call------------\n");
printStrArray(pStrArray, len);
printf("after call------------\n");
pTmp = longestcommonprefix(pStrArray, len);
printf("pTmp %s\n", pTmp);
system("pause");
return 0;
}