本文共 1564 字,大约阅读时间需要 5 分钟。
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
char * longestcommonprefix(char ** strs, int strssize){ int i, j; char *ans = NULL; if(strssize == 0) { ans; } ans = (char *)malloc(200 + 1); //200:字符串最大长度; +1: 字符串尾预留'\0' // 取第一个字符串复制给ans, 以ans为基线,从第2个字符串开始,每个字符串与ans比较: // 如果出现不字符不相等,则给ans当前位置设置'\0',然后ans作为新的基线继续和后续字符串比较 // 每次ans刷新后判断下: 如果ans已经为空,则公共前缀已经为0,直接返回; // 如果对比完所有字符串,则最后ans即为最长公共前缀 strcpy(ans, strs[0]); for(i = 1; i < strssize; i++){ for(j = 0; ans[j] != '\0' && strs[i][j] != '\0'; j++){ if(ans[j] != strs[i][j]){ break; } } ans[j] = '\0'; if(ans == NULL){ return ""; } } return ans;}//-------------------------------------------------------------------------------------//test:void printStrArray(char ** strArray, int strssize){ int i; if (strssize == 0) { return; } for (i = 0; i < strssize; i++) { printf("%s\n", strArray[i]); } return;}int main(){ int len; char *pTmp = NULL; char *pStrArray[] = {"flower", "flow", "flight" }; len = sizeof(pStrArray)/sizeof(char *); printf("before call------------\n"); printStrArray(pStrArray, len); printf("after call------------\n"); pTmp = longestcommonprefix(pStrArray, len); printf("pTmp %s\n", pTmp); system("pause"); return 0;}
转载地址:http://oiyr.baihongyu.com/