每天一道LeetCode-06(最长公共前缀)

51 阅读1分钟

描述:

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: strs = ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

思路

初始化一个prefix用来存储当前的最长前缀,初始值为strs中的第一个元素,再对strs数组中的字符串逐个进行扫描,用prefix来对每个元素进行匹配,例如用'flower'来匹配'flow',逐个字符比较,如果flower的第一个字符等于flow的第一个字符,则继续,当flower的第4个字符e时,flow的第四个字符不存在,并更新此时的prefix(将此时j所在的位置设置为结束符),所以对flow的匹配结束,再对flight进行上述过程。

具体实现

char * longestCommonPrefix(char ** strs, int strsSize){
    if(!strSize) return "";
    char prefix = strs[0];
    for(int i = 1; i < strSize; i++){
        int j = 0;
        //如果匹配的字符存在且相等
        while(prefix[j] && strs[i][j] && prefix[j] == strs[i][j]){
            j++;// 则匹配成功,继续下一个字符
        }
        prefix[j] = "\0";
        if (j == 0) return "";
    }
    return prefix;
}