1. 程式人生 > >Java&LeetCode 初入門——014. 最長公共字首

Java&LeetCode 初入門——014. 最長公共字首

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中文網站尚未給出官方解法