前言:
本人小白,還在努力,如有不對的地方,請指示。
執行結果:
執行用時 :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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題思路:
- 只有一個字母的時候就直接輸出
- 通過
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
轉載說明:務必註明來源,附帶本人博客連接。
請給我點個贊鼓勵我吧