[LeetCode][算法初级][字符串]40 最长共同前缀

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/5/strings/40/

思路是很简单的,就是逐个比较。

但是我的想法是,先两两比较,然后把得到的前缀再和后面的比较,全部比较一遍以后就得到了最大前缀了。

int lcp(char *str1, char* str2, int size){
    int new_size=0;
    while(*str1&&*str2&&size>new_size){
        if(*str1==*str2){
            str1++;
            str2++;
            new_size++;
        }else{
            break;
        }
        
    }
    return new_size;
}

char* longestCommonPrefix(char** strs, int strsSize) {
    int i=0;
    char* s1,*s2;
    char* res;
    int size = strlen(strs[0]);
    s1 = strs[0];
    for(i=1;i<strsSize;i++){
        s2 = strs[i];
        size = lcp(s1,s2,size);
    }
    if(size>0){
        res = malloc(sizeof(char)*(size+1));
        memcpy(res,strs[0],sizeof(char)*size);
        res[size]='\0';
    }else res="";
    return res;
}

后来看了别人的,别人是所有数组同时比较同一个下标的字符的,感觉这样比较好,

会比我的方法减少一些不必要的执行次数。

如下:

char* longestCommonPrefix(char** strs, int strsSize) {
    char *p = *strs;
    int i = 0 ,j = 0;
    if (strsSize == 1) {
        return p;
    }
    if (p == NULL) {
        return "";
    }
    while(p[j] != '\0') {
        for(int i = 1; i < strsSize; i++) {
            if(p[j] != strs[i][j]) {
                p[j] = '\0';
                return p;
            }
        }
        j++;
    }
    return p;
}

猜你喜欢

转载自blog.csdn.net/lokira518/article/details/80301309
今日推荐