最長公共字首(leetcode簡單篇第十四題)
阿新 • • 發佈:2018-11-23
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;
}