题目地址:https://leetcode-cn.com/problems/longest-common-prefix/
之所以用c写是因为在用c写程序时需要考虑的东西更多,尤其涉及到指针,经常容易出各种溢出问题,而且c语言常需要自己“造轮子”,有利于加深对数据结构的理解。
代码如下:
#include <stdio.h> // printf
#include <stdlib.h> // malloc
#include <string.h> // strlen, strncpy
char * longestCommonPrefix(char ** strs, int strsSize){
int i,j;
if (strsSize==0 || strlen(strs[0])==0) // ||前后的顺序不能改变
{
return "";
}
if (strsSize==1)
{
return strs[0];
}
int flag=0;
for (i = 0; i<strlen(strs[0]); i++)
{
j=1;
while (j<strsSize)
{
if (strlen(strs[j])==i || strs[0][i]!=strs[j][i])
{
flag=1;
break;
}
j++;
}
if (flag==1) break;
}
char* rev = (char*)malloc(sizeof(char)*(i+1));// 除了申请相同前缀的本身长度,还需要一个位置存'\0'
strncpy(rev, strs[0], i);// strncpy可能不会再rev末尾加上'\0'来截断
rev[i]='\0';
return rev;
}
main(){
char* strs[3] = {"flower","flow","flight"};
printf("%s\n", longestCommonPrefix(strs, 3));
system("pause");
}