最長公共前綴
描述
編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 ""
。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。
說明:
所有輸入只包含小寫字母 a-z
。
思路
- 特殊情況:數組爲空時返回"",數組元素只有一個時直接返回該元素
- 從第一個字母開始,判斷每個元素的第一個字母是否與第一個元素相同,之後繼續第二個字母;
- 特殊情況:
- 當前字母爲空:由於我們是從前往後開始判斷字母,因此可以知道當前字符串即爲最短字符串,直接返回該元素字符串
- 當前字母與第一個元素的當前位數字母不同:即說明第一個元素的當前位數字母應截斷置爲’\0’,然後返回第一個元素
- 特殊情況:
char * longestCommonPrefix(char ** strs, int strsSize){
if(strsSize == 0 )//空數組返回
return "";
if(strsSize == 1)//單個字符串直接返回
return strs[0];
for(int i=0;;i++) {//第j列第i個字母
for(int j=0;j<strsSize;j++) {
if(strs[j][i] == 0)//爲空時返回當前字符串
return strs[j];
if(strs[0][i] != strs[j][i]) {//與首個字符串不同時將首個字符串截斷返回
strs[0][i] = '\0';
return strs[0];
}
}
}
}
注意
- 剛開始的時候我也只是想到了逐列查找,發現不同元素截斷返回,之後纔在調試過程中發現一些特殊情況的特殊處理