【LeetCode 算法】Find And Replace in String 字符串中的查找與替換-線性模擬

文章目錄

  • Find And Replace in String 字符串中的查找與替換
    • 問題描述:
    • 分析
    • 代碼
      • 線性模擬
    • Tag

Find And Replace in String 字符串中的查找與替換

問題描述:

你會得到一個字符串 s (索引從 0 開始),你必須對它執行 k 個替換操作。替換操作以三個長度均為 k 的并行數組給出:indices, sources, targets

要完成第 i 個替換操作:

  1. 檢查 子字符串 sources[i] 是否出現在 原字符串 s 的索引 indices[i] 處。
  2. 如果沒有出現, 什么也不做
  3. 如果出現,則用 targets[i] 替換 該子字符串。

例如,如果 s = "abcd"indices[i] = 0 , sources[i] = "ab"targets[i] = "eee" ,那么替換的結果將是 "eeecd"

所有替換操作必須 同時 發生,這意味著替換操作不應該影響彼此的索引。測試用例保證元素間不會重疊

  • 例如,一個 s = "abc"indices = [0,1]sources = ["ab","bc"] 的測試用例將不會生成,因為 "ab""bc" 替換重疊。

在對 s 執行所有替換操作后返回 結果字符串

子字符串 是字符串中連續的字符序列。

1 < = s . l e n g t h < = 1000 k = = i n d i c e s . l e n g t h = = s o u r c e s . l e n g t h = = t a r g e t s . l e n g t h 1 < = k < = 100 0 < = i n d i c e s [ i ] < s . l e n g t h 1 < = s o u r c e s [ i ] . l e n g t h , t a r g e t s [ i ] . l e n g t h < = 50 s 僅由小寫英文字母組成 s o u r c e s [ i ] 和 t a r g e t s [ i ] 僅由小寫英文字母組成 1 <= s.length <= 1000\\ k == indices.length == sources.length == targets.length\\ 1 <= k <= 100\\ 0 <= indices[i] < s.length\\ 1 <= sources[i].length, targets[i].length <= 50\\ s 僅由小寫英文字母組成\\ sources[i] 和 targets[i] 僅由小寫英文字母組成 1<=s.length<=1000k==indices.length==sources.length==targets.length1<=k<=1000<=indices[i]<s.length1<=sources[i].length,targets[i].length<=50s僅由小寫英文字母組成sources[i]targets[i]僅由小寫英文字母組成

分析

之前的是基于有序的狀態下,依次遍歷每個被操作的字符串的每個位置,所以需要預處理排序。

而線性的思路,與其說是不排序,不如理解為利用數組的自己的有序性 ,避免了排序。

思路

其主要的思路是構建一個長度與原字符串等長的標記數組,然后遍歷每個被操作的索引,并且進行驗證。

  • 如果需要替換,那么就把需要替換的目標串放入,并且記錄其影響的位置長度。

  • 如果不需要替換,同樣進行標記,該位置的字符串默認直接插入結果串。

需要注意的是在發生替換的情況下,可能會對后續的一定長度的字符跳過。

代碼

線性模擬

class Solution {public String findReplaceString(String s, int[] indices, String[] sources, String[] targets) {int n = s.length();var replaceStr = new String[n]; // 替換后的字符串var replaceLen = new int[n];    // 被替換的長度Arrays.fill(replaceLen, 1);     // 無需替換時 i+=1for (int i = 0; i < indices.length; i++) {int idx = indices[i];if (s.startsWith(sources[i], idx)) {replaceStr[idx] = targets[i];replaceLen[idx] = sources[i].length();}}var ans = new StringBuilder();for (int i = 0; i < n; i += replaceLen[i]) { // 無需替換時 i+=1if (replaceStr[i] == null) {ans.append(s.charAt(i));} else {ans.append(replaceStr[i]);}}return ans.toString();}
} 

時間復雜度 O ( L ) O(L ) O(L)

空間復雜度 O ( L ) O(L) O(L)

線性代碼來源于靈神大佬

Tag

Array

Sort

String

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

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

相關文章

Floyd算法

正如我們所知道的&#xff0c;Floyd算法用于求最短路徑。Floyd算法可以說是Warshall算法的擴展&#xff0c;三個for循環就可以解決問題&#xff0c;所以它的時間復雜度為O(n^3)。 Floyd算法的基本思想如下&#xff1a;從任意節點A到任意節點B的最短路徑不外乎2種可能&#xff…

openGauss學習筆記-42 openGauss 高級數據管理-觸發器

文章目錄 openGauss學習筆記-42 openGauss 高級數據管理-觸發器42.1 語法格式42.2 參數說明42.3 示例 openGauss學習筆記-42 openGauss 高級數據管理-觸發器 觸發器會在指定的數據庫事件發生時自動執行函數。 42.1 語法格式 創建觸發器 CREATE TRIGGER trigger_name { BEFORE…

Swagger-ui在idea中的使用

1.添加依賴 <!--添加swagger2相關概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相關功能--><de…

Linux學習之基本指令一

在學習Linux下的基本指令之前首先大家要知道Linux下一切皆目錄&#xff0c;我們的操作基本上也都是對目錄的操作&#xff0c;這里我們可以聯想我們是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;類比學習更容易理解。 目錄 01.ls指令 02. pwd命令 0…

SpringBoot登錄、退出、獲取用戶信息的session處理

1、登錄方法&#xff1a;login PostMapping("/user/login")public ResponseVo<User> login(Valid RequestBody UserLoginForm userLoginForm,HttpSession session) {ResponseVo<User> userResponseVo userService.login(userLoginForm.getUsername(), …

sql A表(含有部分B表字段) 向B表插入A表數據

今天遇到一個數據庫插入問題 向表中插入 生產狀態 為 2 的數據 但生產狀態為改為12 的所有數據 查看網上的評論 參考 insert into b (a,b,c) select ‘1’,‘2’,c from a where a1 這樣就可以a,b字段是插入指定某個值,而C字段則用表a的c字段. 最后解決了。忽然想起原來也有這…

實現Python對.json文件內容的讀取和寫入

要實現Python對.json文件內容的讀取和寫入&#xff0c;可以使用json庫。 首先&#xff0c;需要安裝json庫&#xff1a; pip install json 然后&#xff0c;可以編寫以下代碼來實現對.json文件內容的讀取和寫入&#xff1a; import json# 讀取json文件 with open(data.json, …

PS實現多個圖片轉化GIF動畫

PS實現多個圖片轉化為GIF動畫步驟 一、導入圖片素材1.打開PS軟件&#xff0c;點擊 [文件] --- [腳本] ---[將文件載入堆棧]2.選擇圖片3.導入成功 二、打開時間軸1.點擊[窗口]---[時間軸]2.選擇創建幀動畫3.創建幀動畫 三、創建動畫1.復制幀。2.設置幀的內容。3.修改圖片停留的時…

分布式應用:Zabbix監控Tomcat

目錄 一、理論 1.Zabbix監控Tomcat 二、實驗 1.Zabbix監控Tomcat 三、問題 1.獲取軟件包失敗 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客戶端日志報錯 一、理論 1.Zabbix監控Tomcat &#xff08;1&#xff09;環境 zabbix服務端&#xff1a;192.168.204.214 …

推薦 4 個 yyds 的 GitHub 項目

本期推薦開源項目目錄&#xff1a; 1. 開源的 Markdown 編輯器 2. MetaGPT 3. SuperAGI 4. 一個舒適的筆記平臺 01 開源的 Markdown 編輯器 Cherry 是騰訊開源的 Markdown 編輯器&#xff0c;基于 Javascript具有輕量簡潔、易于擴展等特點&#xff0c; 它可以運行在瀏覽器或服…

UVM學習知識點

這里是引用 include 和 import pkg區別 1.作用 include與C語言中類似&#xff0c;用于在一個文件中插入另一個文件&#xff1b;import用于在一個作用域中引入一個package&#xff08;或其中的內容&#xff09;&#xff0c;使得這些內容在當前作用域中可以不添加其所在的packag…

常用游戲運營指標DAU、LTV及參考范圍

文章目錄 前言運營指標指標范圍參考值留存指標的意義總結 前言 作為游戲人免不了聽到 DAU 、UP值、留存 等名詞&#xff0c;并且有些名詞聽起來還很像&#xff0c;特別是一款上線的游戲&#xff0c;這些游戲運營指標是衡量游戲業務績效和用戶參與度的重要數據&#xff0c;想做…

Tesseract用OpenCV進行文本檢測

我沒有混日子&#xff0c;只是辛苦的時候沒人看到罷了 一、什么是Tesseract Tesseract是一個開源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一種技術&#xff0c;它可以識別和解析圖像中的文本內容&#xff0c;使計算機能夠理解并處理…

Maven之mirrorof范圍

mirrorOf 是 central 還是 * 的問題 在配置阿里對官方中央倉庫的鏡像服務器時&#xff0c;我們使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共倉庫</name><url>…

vmalert集成釘釘告警

vmalert通過在alert.rules中配置告警規則實現告警&#xff0c;告警規則語法與Prometheus兼容&#xff0c;依賴Alertmanager與prometheus-webhook-dingtalk實現釘釘告警&#xff0c;以下步驟&#xff1a; 1、構建vmalert 從源代碼構建vmalert&#xff1a; git clone https://…

vue computed和watch的區別

conputed 原理 computed計算屬性,依賴一個值的變化而變化且具有緩存作用,computed在vue內部維護了一個dirty屬性,默認為true當取值的時候dirty為true,執行用戶的方法,且將值緩存起來吧dirty設為false再次取值的時候判斷dirty,dirty為false的時候直接從緩存里面取當依賴的數據…

在docker下進行mysql的主從復制

搭建步驟 1、拉取鏡像 docker pull mysql:latest2、查看鏡像 docker images3、創建啟動容器 Master docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:latestSlave docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWO…

企業權限管理(十)-用戶詳情

用戶詳情 UserController findById方法 Controller RequestMapping("/user") public class UserController {Autowiredprivate IUserService userService;//查詢指定id的用戶RequestMapping("/findById.do")public ModelAndView findById(String id) thro…

Sublime Text 4 Build 4151 4152 發布及注冊方法

Sublime Text 是一個商業代碼編輯器。它原生支持許多編程語言和標記語言&#xff0c;用戶可以通過插件來擴展它的功能&#xff0c;這些插件通常是由社區建立的&#xff0c;并以自由軟件許可證的形式維護。為了方便插件&#xff0c;Sublime Text 有一個 Python API。 Sublime T…

【劍指Offer 57】和為s的連續正數序列,Java解密。

LeetCode 劍指Offer 75道練習題 文章目錄 劍指Offer:和為s的連續正數序列示例:限制:解題思路:劍指Offer:和為s的連續正數序列 【題目描述】 輸入一個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。 序列內的數字由小到大排列,不同序列按照首…