LeetCode 14. Longest Common Prefix(最長公共前綴)

Write a function to find the longest common prefix string amongst an array of strings.

即給定一個字符串數組,找出數組中所有字符串的最長公共前綴
解決該問題的算法有多種,最容易想到的是橫向掃描,思路如下圖:

該算法的時間復雜度為O(S),S是所有字符串的總字符數;空間復雜度為O(1)
代碼如下:

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        
        if(strs.length == 0)
            return "";
        String prefix = strs[0];                  // 以第一個字符串作為初始前綴
        for(int i = 1; i < strs.length; i++)      // 向后橫向掃描
        {
            while(strs[i].indexOf(prefix) != 0)   // 不以prefix為前綴
            {
                prefix = prefix.substring(0, prefix.length() - 1);  // 縮小prefix
                if (prefix.isEmpty()) 
                    return "";
            }        
        }
        return prefix;
    }
}

如果字符串數組中有一個字符串很短,使用上面橫向掃描的方法需要很長時間才能將初始公共前綴縮短到最終的結果,這時使用縱向掃描可以加快求解速度。該算法的平均時間復雜度也是O(S),空間復雜度為O(1)
代碼如下:

public class Solution {
    public String longestCommonPrefix(String[] strs) {
            
        if (strs.length == 0) 
        return "";
        for (int i = 0; i < strs[0].length(); i++)
        {
            char c = strs[0].charAt(i);     // 取出當前字符向后縱向掃描
            for (int j = 1; j < strs.length; j++) 
            {
                if (strs[j].length() <= i || strs[j].charAt(i) != c) // 當前字符已不屬于公共前綴
                    return strs[0].substring(0, i);             
            }
        }
        return strs[0];
    }
}

本題還有很多其他解法,如果你感興趣,點擊這里查看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 9.3.3 快速排序 ??快速排序將原數組劃分為兩個子數組,第一個子數組中元素小于等于某個邊界值,第二個子數組中的...
    RichardJieChen閱讀 1,863評論 0 3
  • 8:30草坪已經開始灑水,細細的水柱,讓周圍的空氣也變得清新。 小區里,很多老人。有單獨住的,也有和老伴一起的。今...
    安星閱讀 230評論 0 0
  • 2017年11月25日 星期六 長沙 陰天 (農歷二零一七年十月初八) 我是日記星球96號星寶寶香油女王玲子...
    香油女王玲子閱讀 606評論 1 2