1. 程式人生 > >最長公共字首(leetcode簡單篇第十四題)

最長公共字首(leetcode簡單篇第十四題)

ps:因為筆者也是個剛接觸程式語言的菜鳥,所以這裡的文章都是拿c語言寫的,如果同學們想拿其他語言可以在讀懂原理之後用其他語言書寫

編寫一個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 “”。

示例 1:

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

示例 2:

輸入: [“dog”,“racecar”,“car”]
輸出: “”
解釋: 輸入不存在公共字首。

方法一:橫向比較(倆個倆個比較)

char* longestCommonPrefix(char** strs,
int strsSize) { if(strsSize == 0) return""; if(strsSize == 1) return strs[0]; //只有斜槓零的情況 int i = 0; int index = 0; for(i = 1; i < strsSize; i++)//遍歷每個字串 { for(index = 0; index < strlen(strs[0]) ; index++)//遍歷每個字串的每個字元 { if(strs[0][index] != strs[
i][index])//如果遇到不相同的就賦值斜槓零 { strs[0][index] = '\0';//慢慢縮小sts[0]與其他字串相同的部分 break; } } } return strs[0]; }

方法二:縱向比較(可以通俗的理解為把所有的字串放一列然後每個字元進行比較)

char* longestCommonPrefix(char** strs, int strsSize)
{     
    if(strsSize ==
0) return""; if(strsSize == 1) return strs[0]; int i = 0; int m = 0;//返回字串的結束位置 int index = 0; char* ret = (char*)malloc(strlen(strs[0])*sizeof(char));//重新開闢一塊空間 for(index = 0; index < strlen(strs[0]); index ++)//遍歷字串的每個字元 { for(i = 0; i < strsSize; i++)//遍歷每個字串 { if(strs[0][index] != strs[i][index]) { ret[m] = '\0';//發現不相同時給字串‘\0’返回 return ret; } } ret[m] = strs[0][index];//把相同的字元賦值給ret[m] m++; } ret[m] = '\0'; return ret; }