每日一題02:找出字符串數組中的最長公共前綴

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

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

示例 1:

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

輸出: "fl"

示例 2:

輸入: ["dog","racecar","car"]

輸出: ""

解釋: 輸入不存在公共前綴。

說明:

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

解題思路

1、公共前綴的概念是隻字符串開頭重複的部分,所有字符串中最長的前綴是數組中字符串最短字符串。

2、然後判斷字符串在數組中所有字符串中的首次出現的位置,如果位置存在位置不是0的情況,則不符合,去掉目標字符串最後一位,再次比較,直到找出完全匹配的結果

3、如果沒有任務匹配結果,則字符串長度為空串。

4、異常判斷:輸入的字符串數組長度為0,輸入數組中最短字符串長度為0的情況,則返回空串

代碼函數

public String longestCommonPrefix(String[] strs) {
String result = "";
//遍歷數組找到數組中,字符串長度最短的的串
if(strs.length<=0){
\treturn result;
}
int length = strs[0].length();
String str = "";
for(int i=0;i<strs.length> \tlength = length < strs[i].length()?length:strs[i].length();
\tstr = length < strs[i].length()?str:strs[i];
}
if(length == 0){
\treturn result;
}
//把最短的字符串與其他字符串進行indexof 操作,如果所有字符串都包含則為最長字符串,如果不存在,則縮短字符串,然後繼續嘗試
for(int j=length;j>0;j--){
\tint m = 0;
\tboolean flag = true;
\t\tString u = str.substring(m, m+j);
\t\tfor(String h : strs){
\t\tif(h.indexOf(u) != 0){
\t\t\tflag = false;
\t\t\tbreak;
\t\t}
\t}
\t\tif(flag){
\t\t\tresult = u;
\t\t\tbreak;
\t\t}
}
return result;
}
/<strs.length>

結果

每日一題02:找出字符串數組中的最長公共前綴


每日一題02:找出字符串數組中的最長公共前綴

每天進步1%,堅持學習。只要你一刻不停,堅持下去,你將難以想象自己能取得多麼偉大的成就。歡迎和椰子一起交流,克服懶惰。


分享到:


相關文章: