最長公共前綴

最長公共前綴

描述

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

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

示例 1:

輸入: ["flower","flow","flight"]
輸出: "fl"

示例 2:

輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。

說明:

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

思路

  • 特殊情況:數組爲空時返回"",數組元素只有一個時直接返回該元素
  • 從第一個字母開始,判斷每個元素的第一個字母是否與第一個元素相同,之後繼續第二個字母;
    • 特殊情況:
      1. 當前字母爲空:由於我們是從前往後開始判斷字母,因此可以知道當前字符串即爲最短字符串,直接返回該元素字符串
      2. 當前字母與第一個元素的當前位數字母不同:即說明第一個元素的當前位數字母應截斷置爲’\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];
            }   
        }
    }
}

注意

  • 剛開始的時候我也只是想到了逐列查找,發現不同元素截斷返回,之後纔在調試過程中發現一些特殊情況的特殊處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章