题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
适合新手的简单思路
因为是找最长前缀,使用最长的前缀只能是最短的那个字符串,通过这个最短字符串的长度创建一个数组,长度加一是为了存放'\0',然后进行遍历判断,在每次遍历开始就将前缀赋值给数组然后再用一个循环依次判断其他字符串,如果不同就让计数器记录下来并跳出循环,跳出后再将结束的下标赋上'\0',这样就算是不同的字符也会变成结束符
char* longestCommonPrefix(char** strs, int strsSize) {
int min = 200;
int pos=0;
for(int i=0;i<strsSize;i++){
if(strlen(strs[i])<min){
min = strlen(strs[i]);
}
}
char *result = (char*)malloc(sizeof(char)*(min+1));
int index;
for(index=0;index<min;index++){
result[index] = strs[0][index];
for(int j=0;j<strsSize;j++){
if(strs[j][index]!=result[index]){
pos++;
}
}
if(pos){
break;
}
}
result[index]='\0';
return result;
}
复杂度
-
时间复杂度:O(n^2)
-
空间复杂度:O(n)
力扣题目网址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
萌新不定期在互联网上随地乱丢一些赛博垃圾,还望拨冗批评斧正~