編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 ""。
示例 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:找出字符串數組中的最長公共前綴](http://p2.ttnews.xyz/loading.gif)
![每日一題02:找出字符串數組中的最長公共前綴](http://p2.ttnews.xyz/loading.gif)
每天進步1%,堅持學習。只要你一刻不停,堅持下去,你將難以想象自己能取得多麼偉大的成就。歡迎和椰子一起交流,克服懶惰。
閱讀更多 努力的椰子 的文章