LeetCode每日一題 2734.子串操作后的字典序最小字符串|標志位遍歷字符數組

問題描述 📋

子串操作后的字典序最小字符串

給定一個僅包含小寫字母的字符串,你可以執行如下操作任意次:

  1. 選擇某個子串,將其中的每個字符都替換成其前一個字母(比如 ‘b’ 變成 ‘a’,‘c’ 變成 ‘b’,以此類推,‘a’ 變成 ‘z’)。

目標是通過最少的操作使得字符串變得字典序最小。🔠

解題思路 💡

為了將字符串變得字典序最小,我們可以遵循以下步驟:

  1. 尋找第一個非 ‘a’ 的字符:從左到右掃描字符串,找到第一個非 ‘a’ 的字符,并將其減一。這樣操作可以保證盡可能早地對字符串進行優化,使其字典序最小。🕵??♂?
  2. 中斷操作:在減一操作后,如果再次遇到 ‘a’,我們可以中斷操作,因為繼續操作下去可能會使字符串的字典序變大。🚫
  3. 特殊情況處理:如果整個字符串都是 ‘a’,我們可以將最后一個字符變成 ‘z’,使得結果字典序最小。🔚

為什么這樣做?🤔

  • 盡早優化:通過盡早找到第一個非 ‘a’ 的字符并減一,可以確保字符串從最左邊開始就變得更小,這樣能最大程度上優化整個字符串的字典序。
  • 避免過度修改:如果在修改一個非 ‘a’ 的字符后繼續修改其他字符,可能會導致字符串整體字典序變大。因此,在遇到 ‘a’ 后立即中斷修改,以確保修改效果最佳。
  • 處理全 ‘a’ 字符串:對于全是 ‘a’ 的字符串,將最后一個字符變成 ‘z’ 可以使其變得字典序最小,這是一個邊界情況的處理。
代碼實現 💻
import scala.util.control.Breaks._object Solution {def smallestString(s: String): String = {val chars = s.toCharArrayvar changed = falsebreakable {for (i <- chars.indices) {if (chars(i) != 'a') {chars(i) = (chars(i) - 1).toCharchanged = true} else if (changed) {break()}}}// If no character was changed, change the last character to 'z'if (!changed) {chars(s.length - 1) = 'z'}new String(chars)}
}
代碼分析 🔍
  1. 字符數組轉換:將字符串轉換為字符數組,以便于直接修改。🔄
  2. 標志位 changed:用于記錄是否進行了字符減一操作。📌
  3. 循環遍歷和中斷:使用 breakablebreak 控制循環,確保在第一次遇到非 ‘a’ 字符并進行減一操作后,遇到 ‘a’ 時中斷操作。🛑
  4. 特殊情況處理:如果未進行任何字符修改操作,則將最后一個字符改為 ‘z’。📝
時空復雜度分析 ?💾
  • 時間復雜度:O(n),其中 n 是字符串的長度。因為在最壞情況下,我們需要遍歷整個字符串一次。??
  • 空間復雜度:O(n),用于存儲字符數組。📂

通過這種方法,我們能夠高效地解決問題,并確保字符串在經過最少的操作后,字典序最小。👍

#字符串操作 #字典序 #算法 #LeetCode解題 #Scala #編程技巧


希望這篇博客能夠幫助你理解如何通過標志位和中斷操作來高效地解決這個問題,進一步掌握字符串的操作技巧。歡迎在評論區分享你的看法和疑問!😊📘💬

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

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

相關文章

未來數據中心智能運維的趨勢

隨著信息技術的飛速發展&#xff0c;數據中心作為支撐企業信息化建設的核心樞紐&#xff0c;其運維管理的重要性日益凸顯。傳統的運維模式已難以滿足現代數據中心高效、安全、靈活的需求&#xff0c;而智能運維正成為行業發展的新趨勢。本文將結合運維行業的資料和團隊經驗&…

【JavaScript 小工具】——如何判斷當前頁面是否在微信瀏覽器中打開

要判斷用戶是否通過微信瀏覽器打開網頁&#xff0c;你可以檢查用戶代理&#xff08;User Agent&#xff09;字符串中是否包含微信瀏覽器的特定標識。微信瀏覽器通常會在User Agent中包含"MicroMessenger"這個關鍵詞。 以下是一段JavaScript代碼示例&#xff0c;用于…

不使用cmake,如何在vs2019對cpp項目進行文件夾分類?

不使用cmake&#xff0c;如何在vs2019對cpp項目進行文件夾分類&#xff1f; 1.不使用cmake的根目錄指的是哪里&#xff1f;2.什么時候進行項目管理&#xff1f;3.應該分成什么樣的文件夾&#xff1f;4.如何分類&#xff1f; 1.不使用cmake的根目錄指的是哪里&#xff1f; 查看項…

最新AI智能聊天對話問答系統源碼(圖文搭建部署教程)+AI繪畫,文生圖,TTS語音識別輸入,文檔分析

一、人工智能語言模型和AI繪畫在多個領域廣泛應用 人工智能語言模型和AI繪畫在多個領域都有廣泛的應用。以下是一些它們的主要用處&#xff1a; 人工智能語言模型 內容生成 寫作輔助&#xff1a;幫助撰寫文章、博客、報告、劇本等。 代碼生成&#xff1a;自動生成或補全代碼&…

sudo: /etc/init.d/ssh: command not found

在 WSL 中嘗試啟動 SSH 服務時遇到 sudo: /etc/init.d/ssh: command not found 錯誤 安裝 OpenSSH 服務器 更新軟件包列表 sudo apt update安裝 OpenSSH 服務器 sudo apt install openssh-server啟動 SSH 服務 在 WSL 2 上,服務管理與傳統 Linux 系統有所不同。你可以手動啟動…

C++之STL(十)

1、適配器 2、函數適配器 #include <iostream> using namespace std;#include <algorithm> #include <vector> #include <functional>bool isOdd(int n) {return n % 2 1; } int main() {int a[] {1, 2, 3, 4, 5};vector <int> v(a, a 5);cou…

ONLYOFFICE 8.1版本桌面編輯器測評:重塑辦公效率的巔峰之作

在數字化辦公日益普及的今天&#xff0c;一款高效、便捷且功能強大的桌面編輯器成為了職場人士不可或缺的工具。ONLYOFFICE 8.1版本桌面編輯器憑借其卓越的性能和豐富的功能&#xff0c;成功吸引了眾多用戶的目光。今天&#xff0c;我們將對ONLYOFFICE 8.1版本桌面編輯器進行全…

使用el-amap-info-window遇到的問題

使用的這個庫https://github.com/yangyanggu/vue-amap 想要滾動amapInfoWindow里的內容&#xff0c;但不觸發地圖縮放 默認滾動amapInfoWindow里的內容&#xff0c;會觸發地圖縮放。看了C站一個大佬的文章解決了。 amapInfoWindow會自動滾動到頂部 我的amapInfoWindow里面用了…

【智能制造-4】機器人控制器

機器人控制器中分哪幾個模塊&#xff1f; 機器人控制器通常由以下幾個主要模塊組成: 運動控制模塊: 負責機器人各軸電機的位置、速度、加速度等控制 實現機器人末端執行器的精確定位和運動控制傳感器接口模塊: 負責機器人各種傳感器信號的采集和處理 為運動控制、環境感知等提…

Python-正則表達式

目錄 一、打開正則表達式 二、正則表達式的使用 1、限定符 &#xff08;1&#xff09;x*&#xff1a;*表示它前面的字符y 可以有0個或多個&#xff1b; &#xff08;2&#xff09;x&#xff1a;表示它前面的字符可以出現一次以上&#xff1b;&#xff08;只可以匹配多次&…

電鍍用開關電源技術詳解

1 引言 在電鍍行業里&#xff0c;一般要求工作電源的輸出電壓較低&#xff0c;而電流很大。電源的功率要求也比較高&#xff0c;一般都是幾千瓦到幾十千瓦。目前&#xff0c;如此大功率的電鍍電源一般都采用晶閘管相控整流方式。其缺點是體積大、效率低、噪音高、功率因數低、…

[CocosCreator]CocosCreator網絡通信:https + websocket + protobuf

環境 cocos creator版本&#xff1a;3.8.0 開發語言&#xff1a;ts 操作系統&#xff1a;windows http部分 直接使用 XMLHttpRequest 創建http請求 // _getHttpUrl 方法自己寫字符串拼接public httpPostJsonRequest(uri: string, headData: any, data: any, cb: Function…

2024年6月大眾點評深圳餐飲店鋪POI分析18萬家

2024年6月大眾點評深圳餐飲店鋪POI共有178720家 店鋪POI點位示例&#xff1a; 店鋪id G9TSD2JvdLtA7fdm 店鋪名稱 江味龍蝦館(南山店) 十分制服務評分 8.8 十分制環境評分 8.8 十分制劃算評分 8.6 人均價格 128 評價數量 12840 店鋪地址 南山大道與桂廟路交叉口西北角…

微信小程序 點擊左上角返回彈窗提示

業務需求&#xff1a;當頁面表單沒有提交直接返回時&#xff0c;要提示用戶是否保存當前信息&#xff0c;如果已經提交就不提示了。 由于微信小程序是無法監聽右上角按鈕返回事件。 所以就換個思路 小程序提供了如下兩個Api wx.enableAlertBeforeUnload(Object object)&…

Python入門-基礎知識-編程規范

1.縮進 在編程語言中&#xff0c;代碼之間往往存在著一定的邏輯關系和層次關系。C語言和Java語言等 用“{}”分隔代碼塊&#xff0c;而Python用的是縮進和冒號。Python代碼的縮進可以使用空格鍵或 Tab鍵來實現&#xff0c;通常情況下以4個空格或1個制表符作為1個縮進量。Pytho…

TCP協議中的三次握手和四次揮手機制

TCP協議中的三次握手和四次揮手機制 TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的通信協議&#xff0c;它的三次握手和四次揮手機制是建立和斷開連接的關鍵步驟。 三次握手&#xff1a; 第一次…

等保測評與網絡安全法規的關聯:構建信息安全的法律與技術雙重保障

在信息化高速發展的今天&#xff0c;網絡安全已經成為國家安全、社會穩定和經濟發展的重要基石。為了保障網絡空間的安全和穩定&#xff0c;我國制定了一系列網絡安全法規&#xff0c;其中最為關鍵的就是《中華人民共和國網絡安全法》。與此同時&#xff0c;等保測評&#xff0…

第 2 章SwiftUI 入門及文本操作

如果你之前使用過 UIKit,你會發現TextSwiftUI 中的控件與 UIKit 中的非常相似UILabel。它是一個允許你顯示一行或多行文本的視圖。此Text控件不可編輯,但可用于在屏幕上顯示只讀信息。例如,如果你想顯示一條屏幕消息,你可以使用它Text來實現它。 在本章中,我們將向您展示…

RAG開發中常見的12個痛點及解決方案

受到 Barnett 等人論文《構建檢索增強生成系統的七大挑戰》啟發&#xff0c;本文將探討論文中提及的七大挑戰及在開發 RAG&#xff08;檢索增強生成&#xff09;流程中常遇到的五個額外難題。更為重要的是&#xff0c;我們將深入討論解決這些 RAG 難題的策略&#xff0c;以便我…

使用 WebGL 創建 3D 對象

WebGL Demohttps://mdn.github.io/dom-examples/webgl-examples/tutorial/sample5/index.html 現在讓我們給之前的正方形添加五個面從而可以創建一個三維的立方體。最簡單的方式就是通過調用方法 gl.drawElements() 使用頂點數組列表來替換之前的通過方法gl.drawArrays() 直接…