编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
解题关键:优先处理特殊情况,防止数组访问越界(例如输入[])
char* longestCommonPrefix(char** strs, int strsSize) {
int index = 0 ;
if(strsSize==1) return *(strs);
if(strsSize==0) return "";
int min = strlen(strs[0]);
for(int i = 1 ; i < strsSize ; i++){ //寻找最小串长度
if(strlen(strs[i])<min){ //下标保存在index,串长保存在min
min = strlen(strs[i]);
index = i;
}
}
for(int i = 0;i < min; i++){ //对最小串的每个字母,遍历所有字符串
for(int j = 0 ; j < strsSize ; j++){ //i表示第几个字母,j表示第几个字符串
if(strs[j][i]!=strs[index][i]){ //若某字符串与最小串不同
strs[index][i] = '\0'; //将最小串元素置为'\0并返回
return strs[index];
}
}
}
return strs[index]; //若全部匹配成功说明最小串就是目标串
}
//8ms 空间复杂度O(1) 时间复杂度O(n*m)