LeetCode–最長公共首碼

来源:https://www.cnblogs.com/guizimo/archive/2020/07/01/13220771.html
-Advertisement-
Play Games

LeetCode–最長公共首碼 博客說明 文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝! 說明 leetcode題,14題 最長公共首碼 題目 編寫一個函數來查找字元串數組中的最長公共首碼。 如果不存在公共首碼,返回空字元串 ""。 示例 ...


LeetCode–最長公共首碼

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝!

說明

leetcode題,14題

最長公共首碼

題目

編寫一個函數來查找字元串數組中的最長公共首碼。

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

示例 1:

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

示例 2:

輸入: ["dog","racecar","car"]
輸出: ""

解釋: 輸入不存在公共首碼。

說明:

所有輸入只包含小寫字母 a-z 

Java

水平掃描法

依次遍歷字元串數組中的每個字元串,對於每個遍歷到的字元串,更新最長公共首碼,當遍歷完所有的字元串以後,即可得到字元串數組中的最長公共首碼。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs == null || strs.length == 0){
            return "";
        }
        //假設第一個欄位為公共首碼
        String prefix = strs[0];
        int count = strs.length;
        for(int i = 1;i<count;i++){
            //獲取兩個字元串最長首碼
            prefix = longestCommonPrefix(prefix,strs[i]);
            if(prefix.length() == 0){
                break;
            }
        }
        return prefix;
    }

    //獲取兩個字元串最長首碼
    public String longestCommonPrefix(String str1,String str2){
        int length = Math.min(str1.length(),str2.length());
        int index = 0;
        while(index<length && str1.charAt(index) == str2.charAt(index)){
            index++;
        }
        return str1.substring(0,index);
    }
}

Python

水平掃描法

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        #假設第一個欄位為公共首碼
        prefix , count = strs[0],len(strs)
        for i in range(1,count):
            #獲取兩個字元串最長首碼
            prefix = self.commonPrefix(prefix,strs[i])
            if not prefix:
                return ""
        return prefix
    #獲取兩個字元串最長首碼
    def commonPrefix(self,str1,str2):
        length,index = min(len(str1),len(str2)),0
        while index < length and str1[index] == str2[index]:
            index += 1
        return str1[:index]
    

C++

水平掃描法

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(!strs.size()){
            return "";
        }

        string prefix = strs[0];
        int count = strs.size();
        for (int i = 1;i < count; i++){
            prefix = longestCommonPrefix(prefix,strs[i]);
            if (!prefix.size()){
                break;
            }
        }
        return prefix;
    }

    string longestCommonPrefix(const string& str1,const string& str2){
        int index = 0;
        int length = min(str1.size(),str2.size());
        while(index < length && str1[index] == str2[index]){
            index++;
        }
        return str1.substr(0,index);
    }
};

PHP

水平掃描法

class Solution {

    /**
     * @param String[] $strs
     * @return String
     */
    function longestCommonPrefix($strs) {
        $prefix = '';
        $i = 0;
      	//判斷其中是否有字元串長度為0
        foreach($strs as $key => $value){
            if($value == ''){
                return $prefix;
            }
        }
        //判斷個數是否為空
        if(count($strs)<1){
            return $prefix;
        }

        while(true){
          	//獲取當前第i個字元
            $current = $strs[0]{$i};
            if(!$current){
                return $prefix;
            }
            foreach($strs as $key => $value){
                if($value{$i} != $current){
                    return $prefix;
                }
            }
            $prefix .= $current;
            $i++;
        }
        return $prefix;
    }
}

感謝

leetcode

以及勤勞的自己

關註公眾號: 歸子莫,獲取更多的資料,還有更長的學習計劃


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Redis限流的實現方式有3種,分別是:1、基於Redis的setnx的操作,給指定的key設置了過期實踐;2、基於Redis的數據結構zset,將請求打造成一個zset數組;3、基於Redis的令牌桶演算法,輸出速率大於輸入速率,就要限流。 第一種:基於Redis的setnx的操作 我們在使用Red ...
  • 本篇主要是根據AnalyticDB的論文,來討論AnalyticDB出現的背景,各個模塊的設計,一些特性的解析。可能還會在一些點上還會穿插一些與當前業界開源實現的比對,希望能夠有一個更加深入的探討。OK,那我們開始吧。 AnalyticDB介紹與背景 要說AnalyticDB,那起碼得知道它是乾什麼 ...
  • 前言 日常的開發中,無不都是使用資料庫來進行數據的存儲,由於一般的系統任務中通常不會存在高併發的情況,所以這樣看起來並沒有什麼問題。 一旦涉及大數據量的需求,如一些商品搶購的情景,或者主頁訪問量瞬間較大的時候,單一使用資料庫來保存數據的系統會因為面向磁碟,磁碟讀/寫速度問題有嚴重的性能弊端,詳細的磁 ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 現如今瀏覽器可謂是五花八門,火狐、UC、360、QQ 這些瀏覽器不論美觀還是所謂的安全方面都做的很符合我們需求。但如果你的工作與 IT 掛鉤,無疑 Chrome 將是很多朋友 ...
  • 一.通過console.log輸出(我最喜歡的) 1.js腳本 1.js var arguments = process.argv.splice(2); //獲得入參 var a= arguments[0]; 取第一個 console.log(a) //輸出 2.python腳本 test_1.py ...
  • numpy廣播(Broadcast) 若數組a,b形狀相同,即a.shape==b.shape,那麼a+b,a*b的結果就是對應數位的運算 import numpy as np a=np.array([[1,2,3],[4,5,6]]) b=np.array([[1,4,7],[2,5,8]]) p ...
  • 不知不覺中,做Java開發已經四年了,趁著現在換了工作,還算比較閑,就整理一下自己學習的一些知識。 在學習過程中,我喜歡找的一些電子書來系統化的學習,多數時候我都只是做一個大概的瞭解,沒有深入學習,基本就是看下目錄,看下前幾章的內容,深入的只會在實際用的時候才去詳細看了。我從以下幾個方面整理了一下這 ...
  • 一.node啟動js-3DES-ECB加密 var arguments = process.argv.splice(2); // console.log('所傳遞的參數是:', arguments); var password = arguments[0]; //加密的password var t= ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...