2018年2月11日 星期日

[14] Longest Common Prefix

找出一群array裡面, 最長的共同prefix, 回傳這個共同prefix.
看大家好像都直接以第一個為基準去比別人,
但總覺得不同長度會有點麻煩?!
就萬一最長共同字串剛好就是長度最短的那個人,
降子在比較的時候, 勢必會比到結束字元, 然後感覺會爆炸
所以我一開始是先全部跑一遍找到最短的字串, 移到第一個, 當我的基準
因為不是太複雜的題目所以速度也沒有爆炸慢,
那就讓我們先找最短字串出來當基準吧呵呵呵~~~(櫻花樹下奔跑)

另外就是其實不必每次都跑到字串長度
雖然也是都會在不符合的時候就break了啦,
但總之可以設定最長為當下的max prefix length就可以了
反正前面已經有人只match到這裡, 不可能再長了.
以上.

Longest Common Prefix
void swap(char** a, char** b){
    char *tmp;
    tmp = *a;
    *a=*b;
    *b=tmp;  
}

char* longestCommonPrefix(char** strs, int strsSize) {
    if (strs== NULL || strsSize ==0)
        return "";
    if (strsSize==1)
        return strs[0];
    int i=0;
    int minIndex=0;
    for(i=0;i<strsSize;i++)
    {
        if (strlen(strs[i])< strlen(strs[minIndex]))
            minIndex = i;
    }

    swap(strs[0],strs[minIndex]);
    int preLength=0, max = strlen(strs[0]);
    for(i=1;i<strsSize;i++)  
    {
        for(preLength =0; preLength < max/*strlen(strs[0])*/; preLength++)
            if(strs[0][preLength]!=strs[i][preLength])
                break;
        max = (preLength < max)? (preLength) : max;
    }
    char *ret = malloc(sizeof(char)*(max+1));
    memset(ret,0,max+1);
    strncpy(ret, strs[0], max);
    return ret;
}

沒有留言:

張貼留言