14. 最長公共前綴 LeetCode

前言:

本人小白,還在努力,如有不對的地方,請指示。
執行結果:
執行用時 :0 ms, 在所有 C 提交中擊敗了100.00%的用戶
內存消耗 :
5.4 MB, 在所有 C 提交中擊敗了100.00%的用戶

在這裏插入圖片描述

題目

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

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

示例 1:

輸入: [“flower”,“flow”,“flight”]
輸出: “fl”

示例 2:

輸入: [“dog”,“racecar”,“car”]
輸出: “”

解釋: 輸入不存在公共前綴。
說明:

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

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

解題思路:

  1. 只有一個字母的時候就直接輸出
  2. 通過while循環一行一個字母自己對比,如果不一樣就跳出循環,一樣就進入下一列對比
    如下圖所示:
    在這裏插入圖片描述

代碼如下:

char * longestCommonPrefix(char ** strs, int strsSize){
    if (strsSize == 1)
    {
        return strs[0];
    }
    char *p = NULL;
    int i= 0, j = 0;
    while(i<strsSize && strs[i][j]!='\0')
    {
        if(strs[i][j]!=strs[i+1][j])//垂直比較
        {
            break;
        }
        if(i+1==strsSize-1)//當倒數第二個和最後一個比較後,在到第1列比較
        {
            i=-1;//再返回第0行
            j++;//加到第1列
        }
        i++;
    }
    p = (char *)malloc(sizeof(char) * (j+1));//分配j+1個內存

for (i = 0; i < j; ++i)
{
p[i] = strs[0][i];//將字符串連續存入內存
}
p[j]='\0';//字符串結束符""
return p;
}

小知識:

‘\0’的意思是 ASCII 爲 0 的字符。 它所的意義是“字符串結束符”。 比如,一個字符串 “Hello” ,它是由字符 ‘H’,‘e’,‘l’,‘l’,‘o’,’\0’ 6 個字符在內存中連續存放的。程序在見到第一個 ‘\0’ 時就會認爲該字符串結束了。

作者:RodmaChen
本人博客:https://blog.csdn.net/weixin_46654114
qq:1342709867
轉載說明:務必註明來源,附帶本人博客連接。

請給我點個贊鼓勵我吧
在這裏插入圖片描述

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