问题描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
问题分析
方法一:我们可以假设一个字符串是最长的公共子串,然后去验证,如果此串被验证了,再增加一位字符进行验证,这样就能解决问题。
方法二:因为我们要寻找的是公共子串,所以这一个串是所有字符串的前缀的公共部分,也就是说只要这一个串的某一位与所给串的一位不符合就能判定这一个字符不是公共子串的一部分,由此我们可以假设第一个字符串的第一个字符是公共子串的一部分,验证它,如果成立就将此字符加入答案的一部分,然后再验证第一个字符串的第二个字符,依次类推下去直到找到最长的公共子串,显然方法二优于方法一。
代码
方法二代码:
char * longestCommonPrefix(char ** strs, int strSize){
int num = 0;
char * answer = (char *)malloc(sizeof(int)*201);
for(int i = 0;; i++){
answer[i] = strs[0][i];
if(answer[i]==0){
break;
}
for(int j = 0; j < strSize; j++){
if(answer[i]!=strs[j][i]){
goto a;
}
}
num++;
}
a:
answer[num] = 0;
return answer;
}