力扣131:分割回文串

力扣131:分割回文串

  • 題目
  • 思路
  • 代碼

題目

給你一個字符串 s,請你將 s 分割成一些 子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。

思路

從題目中我們可以總結出這道題的三個需要解決的問題:

  1. 如何判斷回文串
  2. 如何找到一種方案里的所有回文子串
  3. 如何找到所有可能的分割方案

解決了這三個問題我們就解決了這道題,我們先從最簡單的判斷回文串開始,想要判斷回文串我們只需要知道這個子串的開頭位置和結尾位置然后判斷字符串中兩者所代表的值是否相同再將開頭位置進行++結尾位置進行–來完成一個循環判斷即可。直到開頭位置大于等于結尾位置。
第一個問題解決了接下來我們來解決第二個問題,這里我們可以設計一個函數它的參數有兩個分別是當前位置的下標i和開頭位置的下標k,我們讓當前位置i不等于字符串的結尾位置之前都調用自身但是當前位置要+1只有在當前位置等于字符串的結尾位置時才開始判斷開頭位置k和當前位置i這一個子串是否是字符串如果是就插入到一個數組中如果不是就直接返回到上一個位置因為是上一個位置調用了函數才導致當前位置到結尾位置的。然后就是上一個位置進行判斷是否是回文串以此倒推直到找到回文串,之后呢我們再調用函數但是兩個參數都要變成i+1也就是把當前位置和開頭位置全部移到這個回文子串的下一個字符再進行判斷。我可以用一個圖來表示。
![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/aaf35db573bb4a1db9999de623c5c085.png
這樣我們就可以得到一個數組里面存著每一個回文子串。
接下來就是第三個問題如何找到所有方案,這里我們可以使用回溯的方法,有些同學在我們是調用自身來進行分割子串時就發現了這其實是典型的回溯的辦法,所以我們只需要在最后找到回文子串并且將其加入到數組中后再把這個回文子串進行pop掉就可以了。因為我們在i=n-1也就結尾位置后會和上圖一樣一層一層的調用自身直到i=n也就會存儲已經有著一種方案的回文子串數組了之后我們再一層一層的把插入的回文子串給pop掉這樣就可以繼續得到下一種方案了。
在這里插入圖片描述

代碼

class Solution {
public:bool IsPalindrome(string& s , int left,int right){while(left < right){if(s[left++] != s[right--]){return false;}}return true;}vector<vector<string>> partition(string s) {int n = s.size();vector<vector<string>> res;vector<string> path;auto dfs = [&](this auto&& dfs,int i,int start){//當i=n時也就是一種方案的所有的回文串已經找完了if(i == n){res.emplace_back(path);return;}//一直到i = n-1也就是最后一個數if(i < n-1){dfs(i+1,start);}//從i處找到它的回文串if(IsPalindrome(s,start,i) == true){path.emplace_back(s.substr(start,i-start+1));//查找下一個位置的回文串dfs(i+1,i+1);//開始回溯path.pop_back();}};dfs(0,0);return res;}
};

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

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

相關文章

代駕小程序系統開發:引領出行行業數字化轉型

隨著數字技術的飛速發展&#xff0c;出行行業正經歷著深刻的數字化轉型。代駕小程序系統作為這一轉型的重要推手&#xff0c;以其高效、便捷、智能的特點&#xff0c;引領著出行行業向數字化、網絡化、智能化方向發展。一、數字化管理&#xff0c;提升運營效率代駕小程序系統通…

數獨求解器與生成器(回溯算法實現)

摘要本畢業設計旨在利用MATLAB技術實現一個基于回溯算法的數獨求解器與生成器。通過深入分析數獨游戲的規則和回溯算法的原理&#xff0c;設計并實現了數獨求解的核心算法&#xff0c;同時開發了數獨生成功能&#xff0c;能夠生成符合規則的有效數獨謎題。系統采用MATLAB圖形用…

[數據結構]#7 哈希表

哈希表&#xff08;Hash Table&#xff09;&#xff0c;有時也稱為散列表&#xff0c;是一種數據結構&#xff0c;它提供了一種快速存取數據的方法。哈希表利用一個被稱為哈希函數的機制將鍵映射到表中的一個位置來直接訪問記錄&#xff0c;以此加快查找的速度。哈希表通常支持…

C++ 23種設計模式-工廠模式

工廠模式是一種創建型的設計模式&#xff0c;他提供了一種創建對象的最佳方式&#xff0c;而無需指定將要創建對象的具體類。包括&#xff1a;簡單工廠模式、工廠方法模式、抽象工廠模式。簡單工廠模式組成成員&#xff1a;抽象產品類、具體產品類 A、B、C等、工廠類工作原理&a…

vue3 el-table 行的某個特定值來決定某些列是否顯示

在 Vue 3 中使用 Element Plus 的 <el-table> 組件時&#xff0c;如果你想要根據行的某個特定值來決定某些列是否顯示&#xff0c;你可以通過自定義列渲染函數&#xff08;render 函數&#xff09;來實現這一需求。下面是一個如何實現該功能的步驟說明和示例代碼。步驟 1…

電商數據采集API與爬蟲技術結合的全網比價方案

一、技術選型與工具準備API優先策略官方API接入&#xff1a;京東、淘寶、拼多多等平臺提供商品詳情API&#xff0c;需注冊開發者賬號獲取API Key。例如&#xff1a;京東API支持實時獲取商品價格、庫存、評價數據。淘寶API通過RESTful接口返回JSON格式的商品信息&#xff0c;需O…

Socket詳解

一.定義Socket&#xff08;套接字&#xff09;是網絡編程的核心&#xff0c;它允許不同主機或同一主機的不同進程之間進行通信&#xff0c;Socket API 提供了一套標準的接口&#xff0c;支持 TCP、UDP、IP 等協議分為以下三個類型&#xff1a;SOCK_STREAM: 用于tcp協議&#xf…

如何實現打印功能

一、AI賦能提供思路基本框架<!-- 隱藏的打印內容&#xff08;默認不顯示&#xff09; --> <div id"print-container" style"display: none;"><h1>退貨單打印內容</h1><table><!-- 打印專用的表格結構 --></table&g…

Android 架構演進:從 MVC 到 MVVM 的設計之道

在 Android 開發初期&#xff0c;很多開發者會把所有邏輯塞進 Activity—— 網絡請求、數據處理、UI 更新全堆在一起&#xff0c;導致代碼超過數千行&#xff0c;改一個按鈕點擊都要翻半天。這種 “面條式代碼” 的根源是缺乏架構設計。隨著應用復雜度提升&#xff0c;MVC、MVP…

使用 gh-pages 將 next.js15 靜態項目部署到 github pages

以下我使用 next.js15 寫的 Todo List 為例,假設我們本地已經存在一個 next.js15 的 Todo List 項目。 說明:解決了項目部署到 github pages 后訪問不到 css、js、字體以及訪問不到 public 目錄下的圖片問題。 第一步 安裝 gh-pages: npm i gh-pages第二步 在 public 目…

rename系統調用及示例

21. rename - 重命名文件或目錄 函數介紹 rename系統調用用于重命名文件或目錄&#xff0c;也可以將文件或目錄移動到另一個位置。如果目標文件已存在&#xff0c;則會被替換。 函數原型 #include <stdio.h>int rename(const char *oldpath, const char *newpath);功能 將…

PHP框架之Laravel框架教程:3. 數據庫操作(簡要)

3. 數據庫操作&#xff08;簡要&#xff09; 配置 數據庫的配置文件在 config/database.php 文件中&#xff0c;你可以在這個文件中定義所有的數據庫連接配置&#xff0c;并指定默認的數據庫連接。這個文件中提供了大部分 Laravel 能夠支持的數據庫配置示例。 mysql > [driv…

項目七.AI大模型部署

環境準備此處使用的是rock linux8.9操作系統k8s集群三個設備&#xff0c;使用centos7.9操作系統設備配置##上傳ollama工具的壓縮包 [rootproject ~]# ll total 1497732 -rw-r--r-- 1 root root 1533674176 Jul 21 11:27 ollama-linux-amd64.tgz [rootproject ~]# tar -C /usr -…

Oracle 19C RU 19.28 升級和安裝

背景介紹 概述 本次升級包括安全漏掃中所有19c數據庫,漏掃預警版本19.3到19.27各個版本,數據庫需要升級至19.28版本滿足安全要求。 原端19C 升級目標端19.28 db_name racdb racdb ORACLE_SID racdb1/2 racdb1/2 ORACLE_HOME GI:/oracle/asm DB:/oracle/db GI:/orac…

嵌入式學習日志————對射式紅外傳感器計次

前言這是第二次學習這部分內容了&#xff0c;第一次是大一上學期&#xff0c;因為大二下忙著其他事一直沒來得及吧STM32學完&#xff0c;所以假期從頭開始再學&#xff0c;比第一次也有了更深的理解&#xff0c;以下內容均是看【STM32入門教程-2023版 細致講解 中文字幕】https…

ONLYOFFICE深度解鎖系列.13-如何復制、重新排序 PDF 頁面:onlyoffice 9.0.3 新功能

在處理合同、講義、研究資料或掃描文檔時&#xff0c;保持頁面順序井然尤為重要。有時文件頁數繁多、排序混亂或缺少邏輯&#xff0c;這不僅影響閱讀體驗&#xff0c;也不利于后續使用或分享。好消息是&#xff0c;借助 ONLYOFFICE PDF 編輯器&#xff0c;您可以輕松拖拽頁面&a…

vue遞歸樹形結構刪除不符合數據 生成一個新數組

首先看一下數據結構&#xff08;我的是路由菜單&#xff09;{"code": 200,"message": "請求成功!","success": true,"data": [{"startDate": null,"endDate": null,"createTime": "2023…

【機器學習之推薦算法】基于K最近鄰的協同過濾推薦與基于回歸模型的協同過濾推薦

基于K最近鄰的協同過濾推薦 基于K最近鄰的協同過濾推薦其實本質上就是MemoryBased CF&#xff0c;只不過在選取近鄰的時候&#xff0c;加上K最近鄰的限制。 這里我們直接根據MemoryBased CF的代碼實現 修改以下地方 class CollaborativeFiltering(object):based Nonedef __ini…

望言OCR視頻字幕提取2025終極評測:免費版VS專業版提全方位對比(含免費下載)

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01;一、產品定位&#xff1a;AI時代的視頻字幕處理專家望言OCR作為專業的視頻硬字幕提取工具&#xff0c;在AI視頻處理領域占據重要地位。最新評測顯示&#xff0c;其免費版本依然保持著驚人的97…

Matplotlib(二)- Matplotlib簡單繪圖

文章目錄一、pyplot模塊介紹二、Matplotlib簡單繪圖1. 繪制折線圖1.1 折線圖介紹1.2 plt.plot()函數介紹1.3 繪制簡單折線圖1.3.1 繪制單條折線圖1.3.2 繪制多條折線圖1.4 示例&#xff1a;繪制天氣氣溫折線圖2. 繪制柱形圖2.1 柱形圖介紹2.2 plt.bar()函數介紹2.3 繪制柱形圖2…