Java&LeetCode 初入門——014. 最長公共字首
阿新 • • 發佈:2019-01-14
Java&LeetCode 初入門——014. 最長公共字首
文內程式碼全部採用JAVA語言。
題目
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
所有輸入只包含小寫字母 a-z 。
測試用例
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
個人解法
首先預設公共字首pre為空字串“”,按順序取第一個字串內的第i個字元c,判斷c是不是與其餘字串的第i個字元相同,如果全部相同,則給將c連線到pre上,如果出現不一致,直接跳出最外層迴圈,說明該字元不能成為公共字首。
特別注意,當strs=[“aa”,“a”]時,這時會需要判斷第二個字串的第二個字元,但由於字串長度問題,還是報錯,所以要加限制條件,來判斷是否存在這樣的字元。
按照以上思路,執行時出現了特殊測試用例:[]。空字串集合無法進入迴圈,因為讀不到strs[0],所以在外層巢狀if語句。
執行用時: 11 ms, 在Longest Common Prefix的Java提交中擊敗了60.19% 的使用者
class Solution {
public String longestCommonPrefix(String[] strs) {
String pre="";//初始化公共字首
if (strs.length>0) {
//如果字串集合非空
bgm:for (int i = 0; i < strs[0].length(); i++) {
//外層迴圈命名bgm,方便一次性跳出迴圈
char c=strs[0].charAt(i);//依次取第一個字串的第i個字元元素
for (int j = 1; j < strs.length; j++ ) {
//對字串陣列中的第2~end個字元進行判斷
if (i>strs[j].length()-1||strs[j].charAt(i)!=c) {
//如果要查詢的元素位置 超過第j個字串的最後一個位置,
//或者,該位置上的字元不一致,直接跳出最外層迴圈,停止查詢公共字首。
break bgm;
}
}
pre=pre+c;//對所有2~end個字元進行判斷後都滿足,那麼認證c是公共字首中的字元
}
}
return pre;
}
}
官方解法
截止做題時間,leetcode中文網站尚未給出官方解法