第十四题:最长公共前缀
- 编写一个函数来查找字符串数组中的最长公共前缀。
- 如果不存在公共前缀,返回空字符串 ""。
示例 1:
- 输入:strs = ["flower","flow","flight"]
- 输出:"fl"
示例 2:
- 输入:strs = ["dog","racecar","car"]
- 输出:""
- 解释:输入不存在公共前缀。
提示:
- 0 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 仅由小写英文字母组成
解题:
/**
* @file 14.CPP
* @author HarkerYX
* @brief 最长公共前缀
* @version 0.1
* @date 2021-05-04
* @copyright Copyright (c) 2021
*
*/
/*
第十四题:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
解题思路:
循环遍历判断
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/**
* @brief
*
* @param strs
* @param strsSize
* @return char*
*/
char * longestCommonPrefix(char ** strs, int strsSize){
//把0个和1个先单独处理
if(strsSize ==0)
return NULL;
if(strsSize ==1)
return strs[strsSize];
//拿出第一个字符串当做比较
char *comp = strs[0];
int count = 0;
bool flag = true;
//最长200,索性就分个最大的
char *ret = (char *)malloc(201 * sizeof(char));
ret[0] = '\0';
//比较字符串的长度
int compLen = strlen(comp);
//循环比较,一旦发现不同就
for (int i = 0; i <= compLen;i++)
{
count = i;
for (int j = 1; j < strsSize; j++)
{
if (comp[count] != strs[j][count] || comp[count]=='\0'){
flag = false;
break;
}
}
if(!flag)
break;
}
// printf("count = %d\n",count);
memcpy(ret, comp, count);
ret[count] = '\0';
return ret;
}
int main(void)
{
char *strs[] = { "flower", "flow", "flight" };
// char *strs[] = { "flower", "flower", "flower" };
// char *strs[] = { "dog","racecar","car"};
char *ret = NULL;
printf("len = %d\n",sizeof(strs)/sizeof(char*));
ret = longestCommonPrefix(strs, sizeof(strs)/sizeof(char*));
printf("最长公共前缀: [%s] \n",ret);
return 0;
}
最长公共前缀: [fl]