1. 程式人生 > 實用技巧 >LeetCode題解No14——“最長公共字首”

LeetCode題解No14——“最長公共字首”

LeetCode題解

No94

難度:Easy

題目描述:

/*
編寫一個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 1:

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

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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-common-prefix
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
*/

題目思路

   本題比較簡單,兩重迴圈去套就可以,先想清楚思路,首先最長公共字首,那麼滿足每一個字串的匹配,那取第一個字串當做模板,從他裡面取出每一個字元進行比較,隨後的字母如果有不匹配的,直接返回ans即可。如果i大於strs[j]的長度,也沒有必要再比較,直接返回即可

程式碼執行

public class No14 {
   public static void main(String[] args) {
       String[] arr = {"fff","fss","f23"};
       String ans = longestCommonPrefix(arr);
       System.out.println(ans);
   }
   // 按行搜尋
   public static String longestCommonPrefix(String[] strs) {
       // 特判
       int n = strs.length;
       if (n == 0){
           return "";
       }
       // 用一個StringBuffer來存放答案,方便後序的字母的新增
       StringBuffer ans = new StringBuffer();
       for (int i = 0; i < strs[0].length(); i++) {
           // 用一個cur來存放當前的一個字元
           char cur = strs[0].charAt(i);
           for (int j = 1; j < n; j++) {
               // 判斷一個終止條件
               // 如果當前字串的長度比i小,直接退出
               // 如果當前字串的第i個字母和第一行的不匹配,退出
               if (strs[j].length() <= i || strs[j].charAt(i)!=cur){
                   return ans.toString();
               }
           }
           ans.append(cur);
       }
       return ans.toString();
   }
}

糾錯

執行結果