解決leetcode第3597題分割字符串

3597. 分割字符串

難度:中等

問題描述:

給你一個字符串 s,按照以下步驟將其分割為 互不相同的段 :

從下標 0 開始構建一個段。

逐字符擴展當前段,直到該段之前未曾出現過。

只要當前段是唯一的,就將其加入段列表,標記為已經出現過,并從下一個下標開始構建新的段。

重復上述步驟,直到處理完整個字符串 s。

返回字符串數組 segments,其中 segments[i] 表示創建的第 i 段。

示例 1:

輸入: s = "abbccccd"

輸出: ["a","b","bc","c","cc","d"]

解釋:

下標?添加后 已經出現過????當前段????????????新段????????更新后

? ? ? ? 的段? ? ?的段? ? ? ? ? ? ? 是否已經出現過?? ? ? ? ? 已經出現過的段

0? ? ?"a"? ? ? ? []? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?否? ? ? ? ""? ? ? ? ? ? ["a"]

1? ? ?"b"? ? ? ? ["a"]? ? ? ? ? ? ? ? ? ? ? ? ? ? 否? ? ? ? ""? ? ? ? ? ? ["a", "b"]

2? ? ?"b"? ? ? ? ["a", "b"] ???????? ? ? ? ? ? ?是? ? ? ? ?"b"? ? ? ? ? ["a", "b"]

3? ? ?"bc"? ? ? ["a", "b"] ????????? ? ? ? ? ? 否? ? ? ? ?""? ? ? ? ? ? ["a", "b", "bc"]

4? ? ?"c"? ? ? ? ["a", "b", "bc"]? ? ? ? ? ? 否? ? ? ? ? ""? ? ? ? ? ? ["a", "b", "bc", "c"]

5? ? ?"c"? ? ? ? ["a", "b", "bc", "c"]? ? ? 是? ? ? ? ?"c"? ? ? ? ? ?["a", "b", "bc", "c"]

6? ? "cc"? ? ? ?["a", "b", "bc", "c"] ?????否? ? ? ? ? ""? ? ? ? ? ? ["a", "b", "bc", "c", "cc"]

7 ?"d" ????["a", "b", "bc", "c", "cc"] ?否 ????????"" ????????["a", "b", "bc", "c", "cc", "d"]

因此,最終輸出為 ["a", "b", "bc", "c", "cc", "d"]。

示例 2:

輸入: s = "aaaa"

輸出: ["a","aa"]

解釋:

下標? ?添加? ? ? ? ? 已經? ? ? ? ? ? ? ?當前段? ? ? ? ? ? ? ? ?新段? ? ?更新后

? ? ? ? ? 后的段? ? ? 出現過的段? ? 是否已經出現過?? ? ? ? ? ? 已經出現過的段

0? ? ? ?"a"? ? ? ? ? ? ? []? ? ? ? ? ? ? ? ? ? 否? ? ? ? ? ? ? ? ? ? ? ? ? ""? ? ? ? ?["a"]

1? ? ? ?"a"? ? ? ? ? ? ?["a"]? ? ? ? ? ? ? ? 是? ? ? ? ? ? ? ? ? ? ? ? ? ?"a"? ? ? ? ["a"]

2? ? ? ?"aa"? ? ? ? ? ["a"]? ? ? ? ? ? ? ? ?否? ? ? ? ? ? ? ? ? ? ? ? ? ? ""? ? ? ? ?["a", "aa"]

3? ? ? ?"a"? ? ? ? ? ? ["a", "aa"]? ? ? ? ?是? ? ? ? ? ? ? ? ? ? ? ? ? ? "a"? ? ? ?["a", "aa"]

因此,最終輸出為 ["a", "aa"]。

提示:

1 <= s.length <= 105

s 僅包含小寫英文字母。

問題分析:

根據題目的描述,從0號字符開始向后拓展構建新段,在拓展時,只要該段在之前未出現過,就將其加入新段列表,并從下一個下標開始構建新段,所以從一個下標開始找出一個新段是解決問題的關鍵,為此設計函數struct_new_paragraph(i,s,pars),其功能是從下標i開始在字符串s中拓展新段,并將新段加入新段列表pars中,函數返回構建下一個新段的起始位置和本次生成的新段列表,這樣可以反復調用本函數以拓展后續的新段。

主程序根據輸入的字符串s,從索引號0開始利用struct_new_paragraph(i,s,pars)函數拓展新段,只要返回的起始位置小于字符串s的長度n,就可以不斷拓展,最后將新段列表輸出,即是問題的解。

程序如下:

#通過起始位置i、原字符串s和新段列表pars構造新段,返回下一個新段的起始位置和本次生成的新段列表
def struct_new_paragraph(i,s,pars):n=len(s)# j用于控制結束位置,所以當起位置i取到n-1時,j要取到n+1for j in range(i+1,n+1):a=s[i:j]print('截取字符串:',a)if a not in pars:pars.append(a)print(f'新段起始位置{j},新段列表{pars}')return j,parselse:print(f'{a}已經在新段列表中')continueelse:print('j,pars:',n,pars)return n,pars#主程序
s=input('pls input s=')
pars=[]
n=len(s)
print('新段起始位置為0,新段列表為[]')
(i,pars)=struct_new_paragraph(0,s,pars)
while i<n:i, pars = struct_new_paragraph(i, s, pars)
print(f'起始位置索引號{i}已經超過字符串{s}的最大索引號{n-1}')
print(f'最終輸出新段列表為{pars}')

運行實例一

pls input s=abaacd

新段起始位置為0,新段列表為[]

截取字符串: a

新段起始位置1,新段列表['a']

截取字符串: b

新段起始位置2,新段列表['a', 'b']

截取字符串: a

a已經在新段列表中

截取字符串: aa

新段起始位置4,新段列表['a', 'b', 'aa']

截取字符串: c

新段起始位置5,新段列表['a', 'b', 'aa', 'c']

截取字符串: d

新段起始位置6,新段列表['a', 'b', 'aa', 'c', 'd']

起始位置索引號6已經超過字符串abaacd的最大索引號5

最終輸出新段列表為['a', 'b', 'aa', 'c', 'd']

運行實例二

pls input s=bbbbbb

新段起始位置為0,新段列表為[]

截取字符串: b

新段起始位置1,新段列表['b']

截取字符串: b

b已經在新段列表中

截取字符串: bb

新段起始位置3,新段列表['b', 'bb']

截取字符串: b

b已經在新段列表中

截取字符串: bb

bb已經在新段列表中

截取字符串: bbb

新段起始位置6,新段列表['b', 'bb', 'bbb']

起始位置索引號6已經超過字符串bbbbbb的最大索引號5

最終輸出新段列表為['b', 'bb', 'bbb']

運行實例三

pls input s=abbcccd

新段起始位置為0,新段列表為[]

截取字符串: a

新段起始位置1,新段列表['a']

截取字符串: b

新段起始位置2,新段列表['a', 'b']

截取字符串: b

b已經在新段列表中

截取字符串: bc

新段起始位置4,新段列表['a', 'b', 'bc']

截取字符串: c

新段起始位置5,新段列表['a', 'b', 'bc', 'c']

截取字符串: c

c已經在新段列表中

截取字符串: cd

新段起始位置7,新段列表['a', 'b', 'bc', 'c', 'cd']

起始位置索引號7已經超過字符串abbcccd的最大索引號6

最終輸出新段列表為['a', 'b', 'bc', 'c', 'cd']

理清處理問題的邏輯順序,合理分割其中的處理步驟,轉換成對應的函數,問題必將容易解決。

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

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

相關文章

電源芯片之DCDC初探索ING

1. 概述 DC-DC轉換器的意思是直流變直流&#xff08;不同的直流電源值得轉換&#xff09;&#xff0c;是一種在直流電路中將一個電壓值的電能變為另一個電壓值的電能裝置。 DC-DC轉換器一般由控制芯片、電感線圈、二極管、三極管、電容器構成。 2. 基本拓撲結構 2.1 非隔離…

JavaEE:分布式session

一、使用Redis存儲分布式session&#xff1a; 1.SpringBoot整合Redis&#xff0c;見如下地址&#xff1a; JavaEE&#xff1a;SpringBoot整合Redis_a526001650a-CSDN博客 2.代碼實現分布式session存儲(此處以token為例)&#xff1a; Autowired private RedisTemplate<St…

OpenCV CUDA模塊設備層-----“大于閾值設為零” 的圖像處理函數 thresh_to_zero_inv_func()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模塊&#xff08;cudev&#xff09; 中的一個仿函數生成器&#xff0c;用于創建一個 “大于閾值設為零” 的圖像處理函數對象。 …

FastGPT與MCP:解鎖AI新時代的技術密碼

一、AI 浪潮中的新星&#xff1a;FastGPT 與 MCP 登場 在當今科技飛速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;已成為推動各行業變革的核心力量。從智能語音助手到復雜的圖像識別系統&#xff0c;AI 的應用無處不在&#xff0c;而其中的關鍵技術 —— 語言模…

browser-tools-mcp + excel-mcp-server + cursor 實現讀取網頁信息自動寫入Excel

browser-tools-mcp excel-mcp-server cursor 實現讀取網頁信息自動寫入Excel 文章目錄 browser-tools-mcp excel-mcp-server cursor 實現讀取網頁信息自動寫入Excel一、安裝node.js和npm1、安裝nvm2、安裝最新版本的node.js 二、安裝browser-tools-mcp1、安裝 BrowserTools…

Linux安裝JDK和Maven

Linux安裝JDK和Maven 安裝JDK1.8 oracle官網 https://www.oracle.com 下載包地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ 步驟1&#xff1a;官網下載壓縮包 點擊想要下載的版本&#xff0c;需要登錄Oracle的賬號&#xff0c;沒有的話需要…

MySQL主從復制與數據庫集群深度解析

一、主從復制核心架構與復制模式 MySQL主從復制是構建分布式數據庫的基礎技術&#xff0c;通過日志同步機制實現數據冗余與讀寫分離。其核心架構分為三層&#xff1a; 日志記錄層&#xff1a;主庫將數據變更寫入二進制日志&#xff08;Binlog&#xff09;網絡傳輸層&#xff…

安裝emsdk 4.0.10報Connection reset by peer解決

出錯如下: 使用瀏覽器下載所需文件 https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v22.16.0-darwin-x64.tar.gz 移動到到emsdk/downloads下 修改emsdk.py download_even_if_exists=True 設置環境變量

win11,visual studio 2022,配置dcmtk,opencv

一、配置dcmtk 1 文件下載---地址&#xff0c;Software Development based on DCMTK - dicom.offis.de 源文件下載&#xff0c;選擇.zip下載&#xff0c;.tar.gz為Linux和macOS下面常見的壓縮包 支持庫下載 解決 DCMTK 在 Windows 上編譯時所需的依賴庫問題 libiconv GNU有…

2025 最新 Appium Inspector 環境搭建教程

1 環境搭建背景 版本升級&#xff1a;Appium 2.0 版本替代 1.x&#xff0c;原 Appium Desktop 因安全漏洞和功能廢棄不再適用。需求痛點&#xff1a;Android Studio 僅支持 debug 程序元素定位&#xff0c;需通過 Appium Inspector 實現通用 APK 元素定位。 2 環境搭建步驟 …

Vue 安裝使用教程

一、Vue 簡介 Vue&#xff08;讀作 /vju?/&#xff0c;類似于“view”&#xff09;是一款用于構建用戶界面的漸進式 JavaScript 框架。它易于上手&#xff0c;輕量高效&#xff0c;適合快速構建前端界面&#xff0c;廣泛應用于各類 Web 項目中。 二、Vue 安裝方式 2.1 直接通…

通過http調用來訪問neo4j時報錯,curl -X POST 執行指令報錯

curl -X POST ^ More? http://localhost:7474/db/neo4j/tx/commit ^ More? -H Authorization: Basic bmVvNGo6MTIzNDU2Nzg ^ More? -H Content-Type: application/json ^ More? -d { \"statements": [{\"statement": \"MATCH (n) RETURN n, label…

Node.js到底是什么

我想像是npm、vite這些名詞大家都很熟悉&#xff0c;對它們的作用也有大致印象&#xff0c;但是可能都像我一樣不明白Node.js到底是什么&#xff0c;這里給大家帶來一個簡單介紹。 Node.js 詳解&#xff1a;歷史發展、生態構建與底層原理 一、Node.js 的起源與歷史發展 誕生背…

Rust與Go:GAN實戰對決

Rust與Go生成對抗 GAN概念 GAN的全稱是Generative Adversarial Network,中文翻譯為生成對抗網絡。這是一種深度學習模型,由兩部分組成:生成器(Generator)和判別器(Discriminator)。生成器的任務是創建數據,而判別器的任務是區分生成器創建的數據和真實數據。這兩部分…

pyspark driver 上傳pod本地文件到對象存儲

前提: pyspark driver on k8s,環境變量或者spark_home/jars 下有相關對象存儲的包,報錯包問題就這里添加jar即可 from py4j.java_gateway import java_import from pyspark.sql import SparkSession# ----------------------------------------------------------------------…

使用GeoServer發布地圖shapefi(.shp)數據

1.創建新的工作區 2.添加新的數據存儲&#xff0c;選擇Shapefile - ESRI? Shapefiles (*.shp) 如果這個發布頁面退出了 可以這樣找回來 點擊發布返回圖層我們發布的數據在圖層顯示 點擊Layer Preview 預覽 現在前端就可以用 OpenLayers地圖來調用這個服務了

python+uniapp基于微信小程序的PS社區系統

文章目錄 具體實現截圖本項目支持的技術路線源碼獲取詳細視頻演示&#xff1a;文章底部獲取博主聯系方式&#xff01;&#xff01;&#xff01;&#xff01;本系統開發思路進度安排及各階段主要任務java類核心代碼部分展示主要參考文獻&#xff1a;源碼獲取/詳細視頻演示 ##項目…

設計模式 - 組合思維_Unix 設計哲學三大原則

文章目錄 引言Unix 哲學本質三大啟示總覽啟示一&#xff1a;保持簡單清晰性軟件復雜度來源實踐方法 啟示二&#xff1a;借鑒組合理念Unix 組合示例避免“定制驅動”爛設計 啟示三&#xff1a;重拾數據思維數據驅動編程演進案例分析 總結 引言&#xff1a;介紹 Unix 與 Unix 哲學…

C++ 快速回顧(四)

C 快速回顧&#xff08;四&#xff09; 前言一、純虛函數二、final關鍵字1.作用到函數2.作用到類 三、虛函數原理四、Lambda一些知識補充 前言 用于快速回顧之前遺漏或者補充C知識 一、純虛函數 純虛函數主要是當接口&#xff0c;沒有具體的實現要到派生類去實現。 純虛函數…

vue入門學習時,按照官方的教程生成的vue3項目后,命令行運行npm install出現一堆warn,然后運行npm run dev報錯,項目啟動失敗

日期&#xff1a;2025年6月27日 星期五農歷六月初三 VUE版本&#xff1a;vue3 IDE&#xff1a;vs code vue入門學習時&#xff0c;按照官方的教程生成的vue3項目后&#xff0c;命令行運行npm install出現一堆warn&#xff0c;然后運行npm run dev報錯&#xff0c;項目啟動失敗…