题目来源:
力扣https://leetcode.cn/problems/longest-common-prefix/题目简介:
编一个函数来查找字符串数组中的最长公共前缀;
思路:横向扫描
用一句来描述就是lcp(s1,……sn)=lcp(lcp(lcp(s1,s2),s3),……sn)
用第一个字符串做比较基准,先把第一个字符串和第二个比长度,决出短的后,令i=0,把这个短的和此时j指向的字符串进行比较,用一个while循环找出共同部分,然后再让j往后走一位,然后再把之前那个前两个字符得到的公共部分和此时j指向的字符进行比较长度,然后再比较公共长度。以此类推。
代码实现:
char * longestCommonPrefix(char ** strs, int strsSize){
char* prefix=strs[0];
char maxlen=strlen(prefix);//一开始我们是为了用这个prefix存第一个字符串,用maxlen存第一个字符串的长度,便于数字的大小比较。
int i;
for(int j=1;j<strsSize;++j){
int curlen=strlen(strs[j]);
curlen=maxlen<curlen?maxlen:curlen;//在第一次循环中,到这里maxlen都是储存的第一个字符串的长度。
i=0;
while(i<curlen&&strs[j][i]==prefix[i]){
i++;
}
maxlen=i;//到这里maxlen才是真正变成前两个公共前缀的长度
}
prefix[maxlen]='\0';//这一步就是使决出来的字符串结尾,保证这个最长公共前缀是一个完整字符串
return prefix;
}