代碼隨想錄刷題day50|(回溯算法篇)131.分割回文串▲

目錄

一、回溯算法基礎知識

二、分割回文串思路

2.1 如何切割

2.2 判斷回文

2.3 回溯三部曲?

2.4 其他問題

三、相關算法題目

四、總結


一、回溯算法基礎知識

詳見:代碼隨想錄刷題day46|(回溯算法篇)77.組合-CSDN博客

二、分割回文串思路

回溯遞歸法

兩個問題:1.如何切割?2.判斷回文?

2.1 如何切割

切割問題可以抽象成組合問題:取自代碼隨想錄

如何模擬切割線

切割線通過startIndex和 i 來模擬,表示當前處理的子串范圍;

2.2 判斷回文

利用雙指針法,一個從前往后遍歷字符串s,另一個從后往前遍歷字符串s,當兩者不等時,不是回文,返回false;否則返回true;

2.3 回溯三部曲?

①函數參數和返回值:返回為空void,參數傳入字符串s,以及每次遞歸遍歷時的起始位置startIndex;

②終止條件:遞歸的深度,樹的深度,何時結束遞歸:當切割到字符串的最后位置(s.length的位置)時,說明本次遞歸結束,將本次結果加入result結果集中,然后返回;

③單層遞歸邏輯:for循環中,startIndex 表示每次遞歸中開始遍歷的起始位置,i 從startIndex開始,逐漸+1,那么[startIndex, i] 就是要截取的子串;得到子串以后,首先判斷是否為回文,如果是,加入單個結果集 list 中,然后回退;如果不是,跳過本次循環,i++;

注意切割過的位置不能重復切割,所以遞歸中startIndex參數要傳入 i+1;

2.4 其他問題

遞歸循環中如何截取子串?

通過String的substring方法👇

public String substring(int beginIndex, int endIndex)

返回一個新字符串,它是此字符串的一個子字符串。該子字符串從指定的 beginIndex 處開始,直到索引 endIndex - 1 處的字符。因此,該子字符串的長度為 endIndex-beginIndex

參數:beginIndex - 起始索引(包括);endIndex - 結束索引(不包括)。

示例:

"hamburger".substring(4, 8)? ?returns "urge"

"smiles".substring(1, 5)? ? ? ? ? returns "mile"

三、相關算法題目

131.分割回文串

class Solution {List<String> list = new ArrayList<>();//存放單個結果List<List<String>> result = new ArrayList<>();//存放結果集合public List<List<String>> partition(String s) {backtracking(s,0);return result;}private void backtracking(String s, int startIndex){//如果起始索引已經超過子串長度 說明分割完畢 得到結果if(startIndex >= s.length()){result.add(new ArrayList<>(list));return;}//單層遞歸邏輯for(int i = startIndex;i < s.length();i++){//提取從startIndex 到 i 的子串String substring = s.substring(startIndex, i + 1);//判斷是否為回文if(isPalindrome(substring)){//是回文list.add(substring);backtracking(s, i+1);//遞歸處理剩余部分list.removeLast();//回溯 移除當前子串}}}//判斷一個字符串是否是回文private boolean isPalindrome(String s){int left = 0;int right = s.length() - 1;while(left < right){if(s.charAt(left) != s.charAt(right)){return false;}left++;right--;}return true;}
}

四、總結

1.本題難點:理解分割回文串 類似 組合問題,也可以抽象成樹的結構,深度代表遞歸的深度,寬度代表for循環;

2.切割的方式,也就是具體的樹結構是什么樣的?每一個節點;

3.終止條件,最后的葉子節點;

4.單層遞歸邏輯,每次截取的子串是哪里到哪里?

5.如何判斷一個字符串是否為回文;

6.如何截取子串;

7.這真的是中等題目嗎,自己想從一開始分割方式抽象成樹結構就錯咯😶

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

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

相關文章

VS Code PowerShell、Windows PowerShell、CMD 的區別與聯系

VS Code PowerShell、Windows PowerShell、CMD 的區別與聯系? VS Code PowerShell、Windows PowerShell、CMD 的區別與聯系&#xff1a; 一、核心概念對比 名稱 全稱 類型 定位 VS Code PowerShell Visual Studio Code PowerShell 代碼編輯器集成終端 開發/腳本編寫…

關于Unity的CanvasRenderer報錯

MissingReferenceException: The object of type ‘CanvasRenderer’ has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. UnityEngine.UI.GraphicRaycaster.Raycast (UnityEng…

C++編譯流程

編譯器其實就是一個翻譯器&#xff0c;把我們的文件內容翻譯成機器能夠看懂的指令&#xff0c;但如何合理翻譯是核心。 C語言編譯 需要經過以下幾步&#xff1a; 詞法分析&#xff1a;掃描代碼&#xff0c;確定單詞類型&#xff0c;比如是變量還是函數&#xff0c;是標識符還…

python學智能算法(八)|決策樹

【1】引言 前序學習進程中&#xff0c;已經對KNN鄰近算法有了探索&#xff0c;相關文章鏈接為&#xff1a; python學智能算法&#xff08;七&#xff09;|KNN鄰近算法-CSDN博客 但KNN鄰近算法有一個特點是&#xff1a;它在分類的時候&#xff0c;不能知曉每個類別內事物的具…

使用 OpenCV 拼接進行圖像處理對比:以形態學操作為例

圖像處理在計算機視覺中起著至關重要的作用&#xff0c;而 OpenCV 作為一個強大的圖像處理庫&#xff0c;提供了豐富的函數來實現各類圖像處理任務。形態學操作&#xff08;Morphological Operations&#xff09;是其中常用的技術&#xff0c;尤其適用于二值圖像的處理。常見的…

版本控制器Git ,Gitee如何連接Linux Gitee和Github區別

&#x1f4d6; 示例場景 假設你和朋友在開發一個「在線筆記網站」&#xff0c;代碼需要頻繁修改和協作&#xff1a; 只用本地文件管理 每次修改后手動復制文件&#xff0c;命名為 v1.html、v2.html 問題&#xff1a;無法追蹤具體改動內容&#xff1b;多人修改易沖突&#xff1…

使用DeepSeek翻譯英文科技論文,以MarkDown格式輸出,使用Writage 3.3.1插件轉換為Word文件

一、使用DeepSeek翻譯英文科技論文&#xff0c;以MarkDown格式輸出 以科技論文“Electrical Power System Sizing within the Numerical Propulsion System Simulation”為例。 關于Writage 3.3.1的進一步了解&#xff0c;可發送郵件至郵箱pyengine163.com. 首先&#xff0c;打…

【NPU 系列專欄 3.0 -- scale-out 和 scale-in 和 scale-up 和 scale-down

文章目錄 Overview1. Scale-out 和 Scale-in (橫向擴展/縮減)舉例:AI SoC 中的 Scale-out 和 Scale-in2. Scale-up 和 Scale-down (縱向擴展/縮減)舉例:AI SoC 中的 Scale-up 和 Scale-down對比總結Overview 本文會 以 AI SoC 為例 詳細介紹什么是 scale-out 和 scale-i…

Spring Boot 集成 Quartz 實現定時任務(Cron 表達式示例)

Spring Boot 集成 Quartz 實現定時任務&#xff08;Cron 表達式示例&#xff09; 前言1. 添加 Quartz 依賴2. 創建 Quartz 任務3. 配置 Quartz 任務調度4. 啟動 Spring Boot 觀察定時任務執行5. Quartz Cron 表達式詳解6. 結論 前言 在 Spring Boot 項目中&#xff0c;我們經常…

智能汽車圖像及視頻處理方案,支持視頻智能拍攝能力

美攝科技&#xff0c;作為智能汽車圖像及視頻處理領域的先行者&#xff0c;憑借其卓越的技術實力和前瞻性的設計理念&#xff0c;為全球智能汽車制造商帶來了一場視覺盛宴的革新。我們自豪地推出——美攝科技智能汽車圖像及視頻處理方案&#xff0c;一個集高效性、智能化、畫質…

QPrintDialog彈出慢的問題

開發環境 操作系統: openkylin2qt版本 : 5.15.10排查過程 首先看下問題的現象, 問題現象 復現問題的demo很簡單,只能是從跟蹤qt代碼方面入手 void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();} 現在需要找一…

VLAN:邏輯隔離沖突網絡的詳細講解

1. VLAN的基本概念 VLAN&#xff08;Virtual Local Area Network&#xff0c;虛擬局域網&#xff09; 是一種將物理網絡劃分為多個邏輯獨立網絡的技術。通過VLAN&#xff0c;不同邏輯網絡可以在同一物理網絡基礎設施上運行&#xff0c;彼此隔離&#xff0c;互不影響。 核心功能…

投影算子(Projection Operator)的定義、性質、分類以及應用

文章目錄 1. 投影算子的定義2. 投影算子的幾何意義3. 一些簡單的例子例 1&#xff1a;二維平面上的投影例 2&#xff1a;投影到一條任意方向的直線例 3&#xff1a;三維空間中投影到一個平面 4. 投影算子的性質4.1、冪等性&#xff08;Idempotency&#xff09;&#xff1a; P 2…

java使用Apache POI 操作word文檔

項目背景&#xff1a; 當我們對一些word文檔&#xff08;該文檔包含很多的標題比如 1.1 &#xff0c;1.2 &#xff0c; 1.2.1.1&#xff0c; 1.2.2.3&#xff09;當我們刪除其中一項或者幾項時&#xff0c;需要手動的對后續的進行補充。該功能主要是對標題進行自動的補充。 具…

接收與發送ipv6數據包

一、ipv6的概念 IPv6 是英文 “Internet Protocol Version 6”&#xff08;互聯網協議第 6 版&#xff09;的縮寫&#xff0c;是互聯網工程任務組&#xff08;IETF&#xff09;設計的用于替代 IPv4 的下一代 IP 協議&#xff0c;其地址數量號稱可以為全世界的每一粒沙子編上…

龍虎榜——20250321

今日A股龍虎榜方向分析 根據2025年3月21日龍虎榜數據&#xff08;漲停56家&#xff0c;跌停31家&#xff09;&#xff0c;市場呈現結構性分化行情&#xff0c;資金聚焦海洋經濟、機器人、鋰電等主線&#xff0c;部分個股遭機構大幅拋售。以下是具體方向解析&#xff1a; 一、資…

springboot milvus search向量相似度查詢 踩坑使用經驗

1.前提提要&#xff1a;java的pom 版本為&#xff1a;2.4.9 milvus 版本是&#xff1a;2.4.13-hotfix 2.先來工具類方法 /*** 向量搜索* param client* param query* return*/public SearchResp search(NonNull MilvusClientV2 client, NonNull VectorCondition query) {final …

[網絡安全] 濫用Azure內置Contributor角色橫向移動至Azure VM

本文來源于團隊的超輝老師&#xff0c;其系統分析了Azure RBAC角色模型及其在權限濫用場景下的攻擊路徑。通過利用AADInternals工具提升用戶至Contributor角色&#xff0c;攻擊者可在Azure VM中遠程執行命令&#xff0c;創建后門賬戶&#xff0c;實現橫向移動。文中詳述了攻擊步…

Android Compose 基礎布局之 Box 和 Stack 源碼深度剖析(九)

Android Compose 基礎布局之 Box 和 Stack 源碼深度剖析 一、引言 1.1 Android 開發中布局的重要性 在 Android 應用開發里&#xff0c;布局是構建用戶界面&#xff08;UI&#xff09;的關鍵環節。良好的布局設計能夠提升用戶體驗&#xff0c;使應用界面更加美觀、易用且具有…

知識蒸餾:讓大模型“瘦身“而不失智慧的魔術

引言&#xff1a;當AI模型需要"減肥" 在人工智能領域&#xff0c;一個有趣的悖論正在上演&#xff1a;大模型的參數規模每年以10倍速度增長&#xff0c;而移動設備的算力卻始終受限。GPT-4的1750億參數需要價值500萬美元的GPU集群運行&#xff0c;但現實中的智能設備…