【字符串】最長公共前綴 最長回文子串

文章目錄

  • 14. 最長公共前綴
  • 解題思路:模擬
  • 5. 最長回文子串
  • 解題思路一:動態規劃
  • 解題思路二:中心擴散法

在這里插入圖片描述

14. 最長公共前綴

14. 最長公共前綴

? 編寫一個函數來查找字符串數組中的最長公共前綴。

? 如果不存在公共前綴,返回空字符串 ""

示例 1:

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

示例 2:

輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共前綴。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 僅由小寫英文字母組成

解題思路:模擬

? 這道題模擬的思路有兩種,第一種就是每次比較每個字符串同一位置的字符,判斷是否相等,如果不相等則返回前面匹配的位置,可以使用 substr() 函數直接實現這塊!

? 另一種思路就是兩兩字符串進行比較,得到一個最長公共前綴之后,將其與第三個字符串比較,以此類推直到比較了所有字符串之后,得到的結果就是最長的公共前綴了!

? 兩種思路的時間復雜度都是 O(n*m),其中 n 表示的是字符串的個數,m 表示字符串平均字符個數,下面代碼我們采用的是第一種思路!

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {// 每次比較每個字符串同一位置的字符for(int i = 0; i < strs[0].size(); ++i){char tmp = strs[0][i];for(int j = 1; j < strs.size(); ++j){// 如果某個字符串越界了,或者字符不相等,則直接返回前面匹配的位置if((i == strs[j].size()) || (strs[j][i] != tmp))return strs[0].substr(0, i);}}return strs[0];}
};

5. 最長回文子串

5. 最長回文子串

? 給你一個字符串 s,找到 s 中最長的回文子串。

? 如果字符串的反序與原始字符串相同,則該字符串稱為回文字符串。

示例 1:

輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。

示例 2:

輸入:s = "cbbd"
輸出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 僅由數字和英文字母組成

解題思路一:動態規劃

? 這道題的動態規劃解法之前在學動態規劃的時候就已經講過了,這里就不再贅述了,具體可以參考之前的筆記!

class Solution {
public:string longestPalindrome(string s) {// 定義dp二維數組,dp[j][i]表示從[j, i]區間是否為回文字符串bool dp[1000][1000] = { 0 };int maxlen = 0, maxindex = 0;for(int i = 0; i < s.size(); ++i){for(int j = 0; j <= i; ++j){// 狀態轉移方程if(s[i] == s[j]){if(i == j || j + 1 == i)dp[j][i] = true;elsedp[j][i] = dp[j + 1][i - 1];if(dp[j][i] && i - j + 1 > maxlen) // 是回文字符串并且長度更長了再更新{maxlen = i - j + 1;maxindex = j;}}}}return s.substr(maxindex, maxlen);}
};

解題思路二:中心擴散法

? 之前我們在動態規劃筆記中提到,字符串的常見題解方法還有一個中心擴散法(至于一個馬拉車算法就不講了,學習成本高,使用率太低),它其實借助的就是回文字符串的特性,由中心自發的向外擴散尋找回文字符串,直到不符合要求!

? 假設此時我們遍歷到字符串的 i 位置,然后定義兩個指針 leftright 指向該位置,兩指針從該位置分別向左和向右出發,每次走一格,判斷 s[left] 是否等于 s[right],是的話說明此時就是 [left, right] 區間就是一個回文字符串,則判斷是否需要更新最大長度以及回文字符串的起始位置,一直重復上述動作直到判斷不符合或者越界了為止!

? 但是上面操作有個問題,就是只考慮到了區間是奇數的情況,如果是偶數情況比如字符串 "abbc" 的話,此時 "bb" 這種情況就被忽略了,所以我們 需要判斷偶數個字符的情況

class Solution {
public:string longestPalindrome(string s) {int n = s.size();int maxlen = 0, maxindex = 0;for(int i = 0; i < n; ++i){// 判斷奇數情況int left = i, right = i;while(left >= 0 && right < n && s[left] == s[right]){left--;right++;}if(right - left - 1 > maxlen){maxlen = right - left - 1;maxindex = left + 1;}// 判斷偶數情況(就起始位置不一樣,剩下的操作邏輯都是一樣的)left = i, right = i + 1;while(left >= 0 && right < n && s[left] == s[right]){left--;right++;}if(right - left - 1 > maxlen){maxlen = right - left - 1;maxindex = left + 1;}}return s.substr(maxindex, maxlen);}
};

在這里插入圖片描述

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

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

相關文章

Maven的傳遞性、排除依賴、生命周期、插件

一、Maven的傳遞性 藍色背景中的兩個jar包是projectA的直接依賴&#xff0c;其余的Jar包是projectA的間接依賴。 projectA可以使用直接依賴&#xff0c;也可以使用間接依賴。 maven-projectB項目引入了maven-projectC(整個項目打成了jar包&#xff09;和junit兩個jar包。 ma…

API,URL,Token,XML,JSON是干嘛的

API&#xff0c;URL&#xff0c;Token&#xff0c;XML&#xff0c;JSON是干嘛的 API的作用 API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;是一組定義和協議&#xff0c;用于構建和交互軟件應用程序。API允許不同的軟件系統之間…

Spring Boot操作MaxComputer(保姆級教程)

目錄 引言 一、引入依賴 二、配置文件 application.properties&#xff08;信息用自己的奧&#xff09; 三、實體類User.java 四、UserController 五、UserService 六、UserDao 七、UserDao.xml 八、postman 訪問&#xff0c;成功查詢數據 附件(修改和刪除數據) 引言…

Java【網絡原理】(2)初識網絡續與網絡編程

目錄 1.前言 2.正文 2.1TCP協議與UDP協議 2.2socket API進行網絡編程 2.2.1DatagramPacket類 2.2.1.1發送數據報 2.2.1.2接收數據報 2.2.1.3獲取數據報內容 2.2.1.4設置數據報內容 2.2.2DatagramSocket類 2.2.2.1構造方法 2.2.2.2常用方法 2.2.3具體代碼與解釋 3…

【Oracle專欄】sqlplus顯示設置+腳本常用顯示命令

Oracle相關文檔&#xff0c;希望互相學習&#xff0c;共同進步 風123456789&#xff5e;-CSDN博客 1.內容概述 本文主要針對oracle 運維中常用知識點進行整理&#xff0c;包括&#xff1a; 1&#xff09;sqlplus模式下&#xff0c;為了方便查詢設置相應的行寬、列寬、行數。…

在一臺win10專業版設備上使用docker的怪現象

這臺設備上&#xff0c;wsl環境無法直接安裝docker&#xff0c;必須要在宿主機安裝Docker Desktop.然后&#xff0c;在wsl運行前&#xff0c;要先啟動docker desktop&#xff0c;否則&#xff0c;你看不到你自己創建的映像。 然后如果沒有docker desktop加持&#xff0c;你在嘗…

Unity 中Sirenix.OdinInspector 插件常用功能梳理

案例一 public class PracticeAssets : ScriptableObject {[SerializeField][Searchable][ListDrawerSettings(ShowIndexLabels true)][LabelText("練習版數據列表")]public List<PracticeData> Practicies new List<PracticeData>(); } 1. Serialize…

C++ | 面向對象 | 類

&#x1f47b;類 &#x1f47e;語法格式 class className{Access specifiers: // 訪問權限DataType variable; // 變量returnType functions() { } // 方法 };&#x1f47e;訪問權限 class className {public:// 公有成員protected:// 受保護成員private:// 私有成員 }…

從零開始用react + tailwindcss + express + mongodb實現一個聊天程序(五) 實現登錄功能

1.登錄頁面 完善登錄頁面 和注冊差不多 直接copy signUpPage 內容 再稍微修改下 import { useState } from "react"; import { useAuthStore } from "../store/useAuthStore"; import { MessageSquare,Mail,Lock,Eye, EyeOff,Loader2} from "lucide…

Spring Boot電影評論網站系統設計與實現

隨著互聯網和娛樂產業的發展&#xff0c;電影評論網站逐漸成為人們分享觀影體驗、交流影評的重要平臺。本文將介紹一個基于Spring Boot框架開發的電影評論網站系統的功能設計與實現方案。 功能模塊概述 該電影評論網站系統分為管理員模塊和用戶模塊兩大核心部分&#xff0c;以…

XFeat:輕量級的深度學習圖像特征匹配

一、引言&#xff1a;圖像特征匹配的挑戰與XFeat的突破 在計算機視覺領域&#xff0c;圖像特征匹配是視覺定位&#xff08;Visual Localization&#xff09;、三維重建&#xff08;3D Reconstruction&#xff09;、增強現實&#xff08;AR&#xff09;等任務的核心基礎。傳統方…

【TVM教程】為 NVIDIA GPU 自動調度神經網絡

Apache TVM 是一個深度的深度學習編譯框架&#xff0c;適用于 CPU、GPU 和各種機器學習加速芯片。更多 TVM 中文文檔可訪問 →https://tvm.hyper.ai/ 作者&#xff1a;Lianmin Zheng 針對特定設備和工作負載的自動調優對于獲得最佳性能至關重要。本文介紹如何使用 auto-sched…

postgresql postgis擴展相關

項目 下載地址 http://rpmfind.net/linux/rpm2html/search.php?queryprotobuf(x86-64) Postgis Index of /postgis/source/ proj4 Index of /proj/ geos Index of /geos/ libxml2 ftp://xmlsoft.org/libxml2/ Index of /sources Json-c Releases json-c/json-c G…

解鎖健康密碼,擁抱養生生活

在快節奏的現代生活中&#xff0c;健康養生愈發重要&#xff0c;它是我們保持活力、預防疾病、享受美好生活的關鍵。那究竟如何開啟健康養生之旅呢&#xff1f; 合理飲食是養生基石。遵循 “食物多樣&#xff0c;谷類為主” 原則&#xff0c;每日攝入谷薯類、蔬菜水果、畜禽魚蛋…

JavaWeb中的cookie使用

Cookie 1、Cookie是服務端向客戶端響應的一小段數據&#xff0c;最終存放在客戶端中&#xff1b;之后客戶端每次向服務端發送請求&#xff0c;都會在請求頭中攜帶cookie 2、cookie是有時效性的&#xff0c;默認是Session級別&#xff08;整個瀏覽器關閉才會消失&#xff0c;內存…

el-input實現金額輸入

需求&#xff1a;想要實現一個輸入金額的el-input&#xff0c;限制只能輸入數字和一個小數點。失焦數字轉千分位&#xff0c;聚焦轉為數字&#xff0c;超過最大值&#xff0c;紅字提示 效果圖 失焦 聚焦 報錯效果 // 組件limitDialog <template><el-dialog:visible.s…

AcWing 藍橋杯集訓·每日一題2025·密接牛追蹤2

密接牛追蹤2 農夫約翰有 N 頭奶牛排成一排&#xff0c;從左到右依次編號為 1~N。 不幸的是&#xff0c;有一種傳染病正在蔓延。 最開始時&#xff0c;只有一部分奶牛受到感染。 每經過一個晚上&#xff0c;受感染的牛就會將病毒傳染給它左右兩側的牛&#xff08;如果有的話…

30 分鐘從零開始入門 CSS

HTML CSS JS 30分鐘從零開始入門拿下 HTML_html教程-CSDN博客 30 分鐘從零開始入門 CSS-CSDN博客 JavaScript 指南&#xff1a;從入門到實戰開發-CSDN博客 前言 最近也是在復習&#xff0c;把之前沒寫的博客補起來&#xff0c;之前給大家介紹了 html&#xff0c;現在是 CSS 咯…

LabVIEW圖像識別抗干擾分析

問題描述 在基于LabVIEW的探針定位系統中&#xff0c;存在兩個核心技術難點&#xff1a; 相機畸變導致初始定位誤差&#xff1a;非線性畸變使探針無法通過坐標變換直接精確定位&#xff0c;需采用粗定位圖像修正的兩段式控制策略。 圖像識別可靠性不足&#xff1a;復雜背景&a…

淺顯易懂HashMap的數據結構

HashMap 就像一個大倉庫&#xff0c;里面有很多小柜子&#xff08;數組&#xff09;&#xff0c;每個小柜子可以掛一串鏈條&#xff08;鏈表&#xff09;&#xff0c;鏈條太長的時候會變成更高級的架子&#xff08;紅黑樹&#xff09;。下面用超簡單的例子解釋&#xff1a; ?壹…