赞
踩
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
- 输入: ["flower","flow","flight"]
- 输出: "fl"
示例 2:
- 输入: ["dog","racecar","car"]
- 输出: ""
说明:
所有输入只包含小写字母 a-z 。
题解:
1,以数组的第一个字符串为标杆,依次循环取出第一个字符串的前缀字符串
2,从数组的第二个字符串开始和第一个取出来的前缀字符串进行比较
3,用一个变量保存符合公共字符串的长度
注意:在循环比较中,要注意数组溢出的情况。另外假如取出来的前缀字符串比中间的某个字符串长度还大,则没有继续匹配下去的必要了,跳出循环
知识点:
C 库函数 int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节。
参数:
返回值
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- char *longestCommmonPrefix(char **strs,int strSize)
- {
- int i,j;
- int flag = 0,max=0;
- for(i=1; i<=strlen(*strs) && flag!=2; i++)
- {
- flag = 0;
- for(j=1; j<strSize; j++)
- {
- if(i<=strlen(strs[j]) && strncmp(*strs,strs[j],i) != 0)
- {
- flag = 1;
- break;
- }
- if(i>strlen(strs[j]))
- {
- flag = 2;
- break;
- }
- }
- if(flag == 0)
- max = i;
- }
-
- char *result = (char *)malloc((max+1)*sizeof(char));
- memset(result,0,max+1);
- memcpy(result,strs[0],max);
-
- return result;
- }
-
- int main()
- {
- /*
- example 1: char *strs[3]= {"flowers","flow","flight"};
- example 2: char *strs[3]= {"dog","racecar","car"};
- */
- char *strs[3]= {"flowers","flow","flight"};
- char *prefix = longestCommmonPrefix(strs,3);
- printf("%s\n",prefix);
- free(prefix);
- prefix = NULL;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。