【C++算法】61.字符串_最長公共前綴

文章目錄

    • 題目鏈接:
    • 題目描述:
    • 解法
    • C++ 算法代碼:
    • 解釋


題目鏈接:

14. 最長公共前綴


題目描述:

1437737d9724f4bdae721fb88bf0c78d


解法

解法一:兩兩比較

先算前兩個字符串的最長公共前綴,然后拿這個最長公共前綴和后面一個來比較,得到最長公共前綴。直到比到最后一個字符串。

解法二:統一比較

先比較第一列,然后比較第2列,直到有字符串越界,或者有字符不一樣,停止。


C++ 算法代碼:

解法一(兩兩比較):

class Solution 
{
public:string longestCommonPrefix(vector<string>& strs) {// 解法一:兩兩比較法// 基本思路:先用第一個字符串作為基準,然后依次與后面的每個字符串比較// 每次比較后更新公共前綴,最終得到整個數組的最長公共前綴// 初始化返回結果為第一個字符串// 如果數組為空,此處可能會出錯,但題目通常保證輸入非空string ret = strs[0];// 從第二個字符串開始,依次與當前的公共前綴比較for(int i = 1; i < strs.size(); i++)// 調用輔助函數findCommon計算當前公共前綴與下一個字符串的公共前綴// 并更新公共前綴結果ret = findCommon(ret, strs[i]);// 返回最終的最長公共前綴return ret;}// 輔助函數:計算兩個字符串的最長公共前綴string findCommon(string& s1, string& s2){// 用索引i遍歷兩個字符串int i = 0;// 條件一:確保不越界,只比較到較短字符串的長度// 條件二:當前位置字符必須相同才繼續while(i < min(s1.size(), s2.size()) && s1[i] == s2[i]) i++; // 字符相同,繼續比較下一個字符// 截取s1的前i個字符作為公共前綴返回// 此時i表示公共前綴的長度,可能為0(無公共前綴)// substr(pos,len)返回一個新的字符串,包含原字符串從pos位置開始的len個字符return s1.substr(0, i);}
};

解法二(統一比較):

class Solution 
{
public:string longestCommonPrefix(vector<string>& strs) {// 解法二:統一比較(逐列比較)// 基本思路:逐個字符位置比較所有字符串,只要發現不一致就立即返回結果// 從第一個字符串的第一個字符開始,逐位置向后比較// strs[0]:訪問字符串數組的第一個元素(即第一個字符串)// strs[0].size():獲取第一個字符串的長度// i < strs[0].size():判斷索引i是否小于第一個字符串的長度for(int i = 0; i < strs[0].size(); i++){// 獲取第一個字符串在當前位置的字符作為比較基準char tmp = strs[0][i];// 遍歷剩余的所有字符串,檢查它們在相同位置的字符是否與基準相同// strs:輸入的字符串數組(vector<string>類型)// strs.size():獲取字符串數組中的字符串數量// j < strs.size():判斷索引j是否小于數組的大小for(int j = 1; j < strs.size(); j++)// 兩種情況需要立即返回當前已找到的公共前綴:// 1. 當前字符串長度不夠(i已經超出范圍)// 2. 當前字符串在位置i的字符與基準不同// i == strs[j].size():檢查當前檢查的字符位置i是否等于當前字符串strs[j]的長度。就是"當前字符串是否已經到達末尾?"// tmp != strs[j][i]:檢查基準字符tmp(即第一個字符串在位置i的字符)是否與當前字符串strs[j]在同一位置的字符不同。if(i == strs[j].size() || tmp != strs[j][i])// 返回第一個字符串的前i個字符作為最長公共前綴return strs[0].substr(0, i);}// 如果循環正常結束(沒有提前返回),說明第一個字符串是所有字符串的前綴// 返回第一個字符串作為最長公共前綴return strs[0];}
};

解釋

例如:["flower", "flow", "flight"]

執行過程:

  1. i=0: 比較所有字符串的第0個字符
    • strs[0][0] = 'f'
    • strs[1][0] = 'f'
    • strs[2][0] = 'f'
    • 全部匹配,繼續
  2. i=1: 比較所有字符串的第1個字符
    • strs[0][1] = 'l'
    • strs[1][1] = 'l'
    • strs[2][1] = 'l'
    • 全部匹配,繼續
  3. i=2: 比較所有字符串的第2個字符
    • strs[0][2] = 'o'
    • strs[1][2] = 'o'
    • strs[2][2] = 'i' ≠ 'o'
    • 發現不匹配,返回strs[0].substr(0, 2) = “fl”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM 調優不再難:AI 工具自動生成內存優化方案

在 Java 應用程序的開發與運行過程中&#xff0c;Java 虛擬機&#xff08;JVM&#xff09;的性能調優一直是一項極具挑戰性的任務&#xff0c;尤其是內存優化方面。不合適的 JVM 內存配置可能會導致應用程序出現性能瓶頸&#xff0c;甚至頻繁拋出內存溢出異常&#xff0c;影響業…

紛析云開源財務軟件:企業財務數字化轉型的靈活解決方案

紛析云是一家專注于開源財務軟件研發的公司&#xff0c;自2018年成立以來&#xff0c;始終以“開源開放”為核心理念&#xff0c;致力于通過技術創新助力企業實現財務管理的數字化與智能化轉型。其開源財務軟件憑借高擴展性、靈活部署和全面的功能模塊&#xff0c;成為眾多企業…

【數字圖像處理】數字圖像空間域增強(3)

圖像銳化 圖像細節增強 圖像輪廓&#xff1a;灰度值陡然變化的部分 空間變化&#xff1a;計算灰度變化程度 圖像微分法&#xff1a;微分計算灰度梯度突變的速率 一階微分&#xff1a;單向差值 二階微分&#xff1a;雙向插值 一階微分濾波 1&#xff1a;梯度法 梯度&#xff1…

基于Linux的ffmpeg python的關鍵幀抽取

1.FFmpeg的環境配置 首先強調&#xff0c;ffmpeg-python包與ffmpeg包不一樣。 1) 創建一個虛擬環境env conda create -n yourenv python3.x conda activate yourenv2) ffmpeg-python包的安裝 pip install ffmpeg-python3) 安裝系統級別的 FFmpeg 工具 雖然安裝了 ffmpeg-p…

C#進階學習(四)單向鏈表和雙向鏈表,循環鏈表(上)單向鏈表

目錄 前置知識&#xff1a; 一、鏈表中的結點類LinkedNode 1、申明字段節點類&#xff1a; 2、申明屬性節點類: 二、兩種方式實現單向鏈表 ①定框架&#xff1a; ②增加元素的方法&#xff1a;因為是單鏈表&#xff0c;所以增加元素一定是只能在末尾添加元素&#xff0c;…

RK3588 Buildroot 串口測試工具

RK3588 Buildroot串口測試工具(含代碼) 一、引言 1.1 目的 本文檔旨在指導開發人員能快速測試串口功能 1.2 適用范圍 本文檔適用于linux 系統串口測試。 二、開發環境準備 2.1 硬件環境 開發板:RK3588開發板,確保其串口硬件連接正常,具備電源供應、調試串口等基本硬…

HOJ PZ

https://docs.hdoi.cn/deploy 單體部署 請到~/hoj-deploy/standAlone的目錄下&#xff0c;即是與docker-compose.yml的文件同個目錄下&#xff0c;該目錄下有個叫hoj的文件夾&#xff0c;里面的文件夾介紹如下&#xff1a; hoj ├── file # 存儲了上傳的圖片、上傳的臨…

EtherCAT 的優點與缺點

EtherCAT&#xff08;以太網控制自動化技術&#xff09;是一種高性能的工業以太網協議&#xff0c;廣泛應用于實時自動化控制。以下是其核心優缺點分析&#xff1a; ?一、EtherCAT 的核心優點? 1. ?超低延遲 & 高實時性? ?原理?&#xff1a;采用"?Processing…

高并發多級緩存架構實現思路

目錄 1.整體架構 3.安裝環境 1.1 使用docket安裝redis 1.2 配置redis緩存鏈接&#xff1a; 1.3 使用redisTemplate實現 1.4 緩存注解優化 1.4.1 常用緩存注解簡紹 1.4.2 EnableCaching注解的使用 1.4.3使用Cacheable 1.4.4CachePut注解的使用 1.4.5 優化 2.安裝Ngin…

Qt QML實現Windows桌面顏色提取器

前言 實現一個簡單的小工具&#xff0c;使用Qt QML實現Windows桌面顏色提取器&#xff0c;實時顯示鼠標移動位置的顏色值&#xff0c;包括十六進制值和RGB值。該功能在實際應用中比較常見&#xff0c;比如截圖的時候&#xff0c;鼠標移動就會在鼠標位置實時顯示坐標和顏色值&a…

vue3+vite 多個環境配置

同一套代碼 再也不用在不同的環境里來回切換請求地址了 然后踩了一個坑 就是env的文件路徑是在當前項目下 不是在views內 因為公司項目需求只有dev和pro兩個環境 雖然我新增了3個 但是只在這兩個里面配置了 .env是可以配置一些公共配置的 目前需求來說不需要 所以我也懶得配了。…

AI賦能PLC(一):三菱FX-3U編程實戰初級篇

前言 在工業自動化領域&#xff0c;三菱PLC以其高可靠性、靈活性和廣泛的應用場景&#xff0c;成為眾多工程師的首選控制設備。然而&#xff0c;傳統的PLC編程往往需要深厚的專業知識和經驗積累&#xff0c;開發周期長且調試復雜。隨著人工智能技術的快速發展&#xff0c;利用…

XSS 跨站Cookie 盜取表單劫持網絡釣魚溯源分析項目平臺框架

漏洞原理&#xff1a;接受輸入數據&#xff0c;輸出顯示數據后解析執行 基礎類型&#xff1a;反射 ( 非持續 ) &#xff0c;存儲 ( 持續 ) &#xff0c; DOM-BASE 拓展類型&#xff1a; jquery &#xff0c; mxss &#xff0c; uxss &#xff0c; pdfxss &#xff0c; flashx…

鴻蒙應用(醫院診療系統)開發篇2·Axios網絡請求封裝全流程解析

一、項目初始化與環境準備 1. 創建鴻蒙工程 src/main/ets/ ├── api/ │ ├── api.ets # 接口聚合入口 │ ├── login.ets # 登錄模塊接口 │ └── request.ets # 網絡請求核心封裝 └── pages/ └── login.ets # 登錄頁面邏輯…

ADAS高級駕駛輔助系統詳細介紹

ADAS&#xff08;高級駕駛輔助系統&#xff09;核心模塊&#xff0c;通過 “監測→預警→干預” 三層邏輯提升行車安全。用戶選擇車輛時&#xff0c;可關注傳感器配置&#xff08;如是否標配毫米波雷達&#xff09;、功能覆蓋場景&#xff08;如 AEB 是否支持夜間行人&#xff…

Prometheus+Grafana+K8s構建監控告警系統

一、技術介紹 Prometheus、Grafana及K8S服務發現詳解 Prometheus簡介 Prometheus是一個開源的監控系統和時間序列數據庫&#xff0c;最初由SoundCloud開發&#xff0c;現已成為CNCF(云原生計算基金會)的畢業項目?。它專注于實時監控和告警&#xff0c;特別適合云原生和分布式…

MATLAB腳本實現了一個三自由度的通用航空運載器(CAV-H)的軌跡仿真,主要用于模擬升力體在不同飛行階段(初始滑翔段、滑翔段、下壓段)的運動軌跡

%升力體:通用航空運載器CAV-H %讀取數據1 升力系數 alpha = [10 15 20]; Ma = [3.5 5 8 10 15 20 23]; alpha1 = 10:0.1:20; Ma1 = 3.5:0.1:23; [Ma1, alpha1] = meshgrid(Ma1, alpha1); CL = readmatrix(simulation.xlsx, Sheet, Sheet1, Range, B2:H4); CL1 = interp2(…

Day09【基于jieba分詞和RNN實現的簡單中文分詞】

基于jieba分詞和RNN實現的中文分詞 目標數據準備主程序預測效果 目標 本文基于給定的中文詞表&#xff0c;將輸入的文本基于jieba分詞分割為若干個詞&#xff0c;詞的末尾對應的標簽為1&#xff0c;中間部分對應的標簽為0&#xff0c;同時將分詞后的單詞基于中文詞表做初步序列…

Linux-服務器添加審計日志功能

#查看audit軟件是否在運行(狀態為active而且為綠色表示已經在運行) systemctl start auditd #如果沒有在運行的話,查看是否被系統禁用 (audit為0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改為audit=1 #更新GRUB…

uniappx項目上架各手機平臺

前段時間用uniappx開發的App&#xff0c;領導要求要在各個主要手機平臺上上架了&#xff0c;本來不是我的任務&#xff0c;后來其他人沒有空交給我了&#xff0c;上架小白一枚&#xff0c;哭唧唧的自己研究吧&#xff0c;根據領導發的賬號密碼登錄各個平臺上架&#xff0c;花費…