【排序 隊列】1585. 檢查字符串是否可以通過排序子字符串得到另一個字符串

本文涉及知識點

排序 隊列

LeetCode1585. 檢查字符串是否可以通過排序子字符串得到另一個字符串

給你兩個字符串 s 和 t ,請你通過若干次以下操作將字符串 s 轉化成字符串 t :
選擇 s 中一個 非空 子字符串并將它包含的字符就地 升序 排序。
比方說,對下劃線所示的子字符串進行操作可以由 “14234” 得到 “12344” 。
如果可以將字符串 s 變成 t ,返回 true 。否則,返回 false 。
一個 子字符串 定義為一個字符串中連續的若干字符。
示例 1:
輸入:s = “84532”, t = “34852”
輸出:true
解釋:你可以按以下操作將 s 轉變為 t :
“84532” (從下標 2 到下標 3)-> “84352”
“84352” (從下標 0 到下標 2) -> “34852”
示例 2:

輸入:s = “34521”, t = “23415”
輸出:true
解釋:你可以按以下操作將 s 轉變為 t :
“34521” -> “23451”
“23451” -> “23415”
示例 3:

輸入:s = “12345”, t = “12435”
輸出:false
示例 4:

輸入:s = “1”, t = “2”
輸出:false

提示:
s.length == t.length
1 <= s.length <= 105
s 和 t 都只包含數字字符,即 ‘0’ 到 ‘9’ 。

冒泡排序

indexs[i] 是隊列,升序記錄i+'0’的所有下標。
根據冒泡排序的原理,選擇m個字符排序能完成的效果,若干次選擇2個元素排序也能完成。
從小到大枚舉i,如果s[i] < t[i] 返回false
尋找 j > i ,且s[j]等于s[i] ,最小j
如果找不到j,返回false
s[i+1,j-1] 如果有字符小于s[j],則返回false。
indexs[t[i]-‘0’]] 出隊。
** 注意**:除了頂替當前字符的字符,其它字符的相對位置不變。由于只需要相對順序,所以除替換當前字符的字符出隊外,其它字符都不需要變化。
時間復雜度: O(n)

代碼

核心代碼

class Solution {
public:bool isTransformable(string s, string t) {queue<int> indexs[10];for (int i = 0; i < s.length(); i++) {indexs[s[i] - '0'].emplace(i);}for (int i = 0; i < s.length(); i++) {auto& que = indexs[t[i] - '0'];if (que.empty()) { return false; }for (int j = 0; j < t[i] - '0'; j++) {if (indexs[j].size() && (indexs[j].front() < que.front())) { return false; }}que.pop();}return true;}
};

單元測試

template<class T1,class T2>
void AssertEx(const T1& t1, const T2& t2)
{Assert::AreEqual(t1 , t2);
}template<class T>
void AssertEx(const vector<T>& v1, const vector<T>& v2)
{Assert::AreEqual(v1.size(), v2.size());	for (int i = 0; i < v1.size(); i++){Assert::AreEqual(v1[i], v2[i]);}
}template<class T>
void AssertV2(vector<vector<T>> vv1, vector<vector<T>> vv2)
{sort(vv1.begin(), vv1.end());sort(vv2.begin(), vv2.end());Assert::AreEqual(vv1.size(), vv2.size());for (int i = 0; i < vv1.size(); i++){AssertEx(vv1[i], vv2[i]);}
}namespace UnitTest
{string s,  t;TEST_CLASS(UnitTest){public:TEST_METHOD(TestMethod0){s = "84532", t = "34852";auto res = Solution().isTransformable(s, t);AssertEx(true, res);}TEST_METHOD(TestMethod1){s = "34521", t = "23415";auto res = Solution().isTransformable(s, t);AssertEx(true, res);}TEST_METHOD(TestMethod2){s = "12345", t = "12435";auto res = Solution().isTransformable(s, t);AssertEx(false, res);}TEST_METHOD(TestMethod3){s = "1", t = "2";auto res = Solution().isTransformable(s, t);AssertEx(false, res);}};
}

擴展閱讀

視頻課程

先學簡單的課程,請移步CSDN學院,聽白銀講師(也就是鄙人)的講解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成戰斗了,為老板分憂,請學習C#入職培訓、C++入職培訓等課程
https://edu.csdn.net/lecturer/6176

相關推薦

我想對大家說的話
《喜缺全書算法冊》以原理、正確性證明、總結為主。
按類別查閱鄙人的算法文章,請點擊《算法與數據匯總》。
有效學習:明確的目標 及時的反饋 拉伸區(難度合適) 專注
聞缺陷則喜(喜缺)是一個美好的愿望,早發現問題,早修改問題,給老板節約錢。
子墨子言之:事無終始,無務多業。也就是我們常說的專業的人做專業的事。
如果程序是一條龍,那算法就是他的是睛

測試環境

操作系統:win7 開發環境: VS2019 C++17
或者 操作系統:win10 開發環境: VS2022 C++17
如無特殊說明,本算法用**C++**實現。

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

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

相關文章

Makefile中strip函數的用法

在Makefile中&#xff0c;strip 函數的作用是去除變量值兩端的空白字符&#xff08;空格和制表符&#xff09;。它的基本語法如下&#xff1a; stripped : $(strip variable)其中&#xff0c;variable 是要去除空白字符的變量名或表達式。strip 函數通常用于確保變量的值不包含…

Scikit-learn中的Fit方法:機器學習模型的靈魂

Scikit-learn中的Fit方法&#xff1a;機器學習模型的靈魂 在機器學習的世界里&#xff0c;Scikit-learn&#xff08;簡稱sklearn&#xff09;是一個廣受歡迎的Python庫&#xff0c;以其簡潔、高效而著稱。而在這個庫中&#xff0c;fit方法扮演了一個至關重要的角色。本文將深入…

LLM大語言模型-AI大模型全面介紹

簡介&#xff1a; 大語言模型&#xff08;LLM&#xff09;是深度學習的產物&#xff0c;包含數十億至數萬億參數&#xff0c;通過大規模數據訓練&#xff0c;能處理多種自然語言任務。LLM基于Transformer架構&#xff0c;利用多頭注意力機制處理長距離依賴&#xff0c;經過預訓…

政策護航新能源:政策紅利激發行業活力,助推綠色經濟騰飛

隨著全球氣候變化問題日益嚴重&#xff0c;新能源行業的發展成為推動綠色經濟騰飛的重要引擎。近年來&#xff0c;各國政府紛紛出臺政策支持新能源產業&#xff0c;旨在激發行業活力&#xff0c;促進經濟可持續發展。本文將從政策紅利的角度&#xff0c;探討新能源行業發展的現…

什么是CMSIS || 標準庫與HAL庫

一&#xff0c;ARM&#xff08;Cortex Microcontroller Software Interface Standard&#xff09; ARM Cortex? 微控制器軟件接口標準&#xff08;Cortex Microcontroller Software Interface Standard&#xff09;是 CortexM 處理器系列的與供應商無關的硬件抽象層。…

docker的安裝配置及使用

一.Docker的由來 Docker 最初是 dotCloud 公司創始人Solomon Hykes 在法國期間發起的一個公司內部項目。 2010年的專門做PAAS平臺&#xff0c;但是到了2013年的時候&#xff0c;像亞馬遜&#xff0c;微軟&#xff0c;Google都開始做PAAS平臺。 到了2013年&#xff0c;公司資金鏈…

空調器的銅管

1)、 全新開發的空調器&#xff0c;在鈑金、塑料件結構方案設計的同時&#xff0c;進行配管結構設計,充分考慮整體空間的合理分配&#xff0c;以避免配管設計在其它結構方案確定之后&#xff0c;只局限在有限的空間內進行。 2)、 制冷系統以外的結構件已定型的產品&#xff0c…

仿真模擬--靜態浮動路由

目錄 靜態路由 浮動路由 靜態路由 浮動路由

Verilog描述一個帶有異步置位和異步清零的D觸發器

1 帶有異步置位和異步清零的D觸發器的真值表&#xff1a; 2 Verilog代碼描述 module DFF_SR(CLK, D, Rd, Sd, Q, QN);input CLK, D, Rd, Sd;output Q, QN;reg Q_DFF;always (posedge CLKor negedge Rd or negedge Sd)beginif(!Rd)Q_DFF < 1b0;else if(!Sd)Q_DFF < 1b1;e…

使用 C# 和 OpenXML 讀取大型 Excel 文件

介紹 高效讀取大型 Excel 文件可能具有挑戰性&#xff0c;尤其是在處理需要高性能和可擴展性的應用程序時。Microsoft 的 OpenXML SDK 提供了一套強大的工具來處理 Office 文檔&#xff08;包括 Excel 文件&#xff09;&#xff0c;而無需在服務器上安裝 Excel。本文將指導您使…

華為 Mate 70 系列曝光:首發鴻蒙系統,共四款機型

目前華為在 HDC 2024 大會上宣布&#xff0c;HaemonyOS NEXT 開啟開發者先鋒用戶 Beta 測試&#xff0c;根據官方時間表來看&#xff0c;HaemonyOS NEXT 將在 8 月啟動第一批公開 Beta 測試&#xff0c;第四季度推出第一批正式版以及啟動第二批公測。 華為 Mate 70 系列將會與 …

(深度學習記錄)第TR6周:Transformer實戰-單詞預測

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 &#x1f3e1;我的環境&#xff1a; 語言環境&#xff1a;Python3.11.4編譯器&#xff1a;Jupyter Notebooktorcch版本&#xff1a;2.0.…

Keil 5編譯出現misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘

no member named ‘IP’ in ‘NVIC_Type’ 我們在使用Keil 5編譯器的AC6進行代碼編譯的使用&#xff0c;出現如下的錯誤&#xff1b; 當前的環境 編譯器版本 Keil uVision5&#xff0c;V5.31.0.0&#xff1b; CMSIS-Core 版本V6…1.0&#xff1b; 采用GD32F407VK主芯片&…

【Flutter 面試題】 main future mirotask 的執行順序是怎樣的?

【Flutter 面試題】 main future mirotask 的執行順序是怎樣的? 文章目錄 寫在前面口述回答補充說明實際案例代碼代碼運行結果運行結果說明代碼執行順序的總結寫在前面 ?? 關于我 ,小雨青年 ?? CSDN博客專家,GitChat專欄作者,阿里云社區專家博主,51CTO專家博主。2023…

Java中的微服務架構:設計、部署與管理

Java中的微服務架構&#xff1a;設計、部署與管理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我想和大家分享一下Java中的微服務架構&…

【PythonWeb開發】Flask四大內置對象

在Flask中&#xff0c;current_app、g、request、session是非常關鍵的內置對象&#xff0c;它們分別承擔著不同的作用&#xff0c;并廣泛應用于Web開發中的多個環節。 &#xff08;1&#xff09;current_app 它是一個代表當前Flask應用實例的代理對象&#xff0c;允許開發者在…

SQL之日期時間相關知識點及函數

1.日期函數 DATE(): 從日期時間值中提取日期部分。 SELECT DATE(2024-06-16 12:34:56); -- 返回 2024-06-16 CURDATE(): 返回當前日期。 SELECT CURDATE(); -- 返回當前日期&#xff0c;例如 2024-06-16 NOW(): 返回當前日期和時間。 SELECT NOW(); -- 返回當前日期和…

C# 中的 Null:處理缺失值和可空類型

探索數據庫和編程語言中的 NULL 概念&#xff0c;它表示值缺失或數據缺失。了解其在 SQL 中的重要性、其作為占位符的作用等。 在 C# 中&#xff0c;null 是一個關鍵字&#xff0c;表示不引用任何對象的引用。它用于指示不存在值或未初始化的引用。 當變量被賦值為 null 時&a…

微信小程序傳統開發登錄和云開發登錄的區別

1. 傳統開發登錄流程 1. 用戶端調用wx.login從微信服務器獲取code; 2. 用戶端用wx.request將獲取的code傳遞給后端服務器&#xff1b; 3. 后端服務器將拿到的code傳給微信服務器&#xff0c;換取openid和session_key; 4. 后端服務器將獲取到的信息返回給用戶端&#xff1b…

Nuxt3 的生命周期和鉤子函數(一)

title: Nuxt3 的生命周期和鉤子函數&#xff08;一&#xff09; date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要&#xff1a;本文是關于Nuxt3的系列文章之一&#xff0c;主要探討Nuxt3的生命周期和鉤子函數&#xff0c;引導讀者深入了解其在前端開發中…