學渣帶你刷Leetcode0014. 最長公共前綴

題目描述

編寫一個函數來查找字符串數組中的最長公共前綴。

如果不存在公共前綴,返回空字符串 ""。

示例 1:

輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:

輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。
說明:

所有輸入只包含小寫字母 a-z 。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-common-prefix
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

白話題目:

一推字符串,前綴----從頭開始數唄,公共前綴,就是前面的都一樣。只有a-z的小寫字母

算法:

我們今天用最笨的辦法過這個題就好了,先這樣,看這些單詞就是這樣存的,之後我們就逐列 逐行的比較每一個字符(字母),

一行一行的往下爬,走到最下面之後都相等的話,我們就認爲我們的這一例is OK,再從第一行開始,去比較第二列,周而復始,無窮無盡,也不是( i < strsSize && strs[i][j] != '\0')

找到後就把位置內的元素輸出唄。

 

Tips:(1)字符串數組的這種存儲方式會不?不會沒關係,看下面的代碼

           (2)返回值的輸出變量涉及到局部變量的一些問題,這裏也是有坑的,會跳不?不會沒關係,看下面代碼,要申請地址滴

 ?什麼?我沒寫的明白,沒問題,看視頻啊,視頻裏話說的更直白更囉嗦的。

詳細解釋關注 B站  【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB

C語言完全代碼

#include <stdio.h>
#include <stdlib.h>
char * longestCommonPrefix(char ** strs, int strsSize)
{
    if (strsSize == 1)
        return strs[0];   //一個就是自己
    char *p = NULL;
    int i, j = 0;

    for (i = 0; i < strsSize && strs[i][j] != '\0'; ++i)
    {
        if (strs[i][j] != strs[i+1][j])   //和下一行的比,
            break;
        if (i == strsSize-2)
        {
            i = -1;         //第一個字母比較完了,從頭開始比第二個
            ++j;
        }
    }

    p = (char *)malloc(sizeof(char) * (j+1));  //得這麼申請的才能返回

    for (i = 0; i < j; ++i)
        p[i] = strs[0][i];
    p[i] = '\0';

    return p;
}

int main()
{
    int strsSize;
    scanf("%d",&strsSize);
    //char* strs[strsSize];  都行
    char **strs=(char **)malloc(strsSize*sizeof(char));
    int m;

    for ( m = 0; m < strsSize; m ++)
    {
        strs[m]=(char*)malloc(100*sizeof(char));
        scanf("%s",strs[m]);   //就是指針的地址
    }

    for ( m = 0; m < strsSize; m ++)
    {
        printf("%s\n",strs[m]);
    }

    char *result=longestCommonPrefix(strs,strsSize);
    printf("%s\n", result);//

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章