力扣每日一題 6/27 字符串 貪心

  • 博客主頁:誓則盟約
  • 系列專欄:IT競賽 專欄
  • 關注博主,后期持續更新系列文章
  • 如果有錯誤感謝請大家批評指出,及時修改
  • 感謝大家點贊👍收藏?評論??

2734.執行子串操作后的字典序最小字符串【中等

題目:

給你一個僅由小寫英文字母組成的字符串?s?。在一步操作中,你可以完成以下行為:

  • 選擇?s?的任一非空子字符串,可能是整個字符串,接著將字符串中的每一個字符替換為英文字母表中的前一個字符。例如,'b' 用 'a' 替換,'a' 用 'z' 替換。

返回執行上述操作?恰好一次?后可以獲得的?字典序最小?的字符串。

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

現有長度相同的兩個字符串?x?和 字符串?y?,在滿足?x[i] != y[i]?的第一個位置?i?上,如果??x[i]?在字母表中先于?y[i]?出現,則認為字符串?x?比字符串?y?字典序更小?。

示例 1:

輸入:s = "cbabc"
輸出:"baabc"
解釋:我們選擇從下標 0 開始、到下標 1 結束的子字符串執行操作。 
可以證明最終得到的字符串是字典序最小的。

示例 2:

輸入:s = "acbbc"
輸出:"abaab"
解釋:我們選擇從下標 1 開始、到下標 4 結束的子字符串執行操作。
可以證明最終得到的字符串是字典序最小的。

示例 3:

輸入:s = "leetcode"
輸出:"kddsbncd"
解釋:我們選擇整個字符串執行操作。
可以證明最終得到的字符串是字典序最小的。

提示:

  • 1 <= s.length <= 3 * 10**5
  • s?僅由小寫英文字母組成

分析問題:

????????讀題意,可以知道這道題就是在從前往后遍歷把每個非a的字母都變成它之前的小寫字母,這里可以用ASCLL碼進行實現,并且只能選擇一個子序列。什么意思呢? 就是只能選擇在兩個a中間夾著的一個子序列,或者是一個a前面的子序列,如果前面的子序列為空字符串,那么就是a后面的子序列。

????????需要注意的是,這里必須要操作一次,也就是說如果s全是a的話,也必須要執行一次操作,那么當然是選最后的一個a將其變成z是字典序最小的情況。

????????思路很簡單,總的來說就是把字符串以‘a’為標志分隔,取最前面一個不空的字符串作為我們選擇的子字符串來修改。

????????這種思路雖然是正確的,但是復雜度太高,代碼太復雜,需要處理的細節很多。所以我們可以對該代碼進一步優化

優化思路如下:

  1. 首先獲取輸入字符串?s?的長度?n?,并初始化一個索引?i?為 0 。
  2. 通過一個?while?循環,從字符串的開頭開始,找到第一個不是?'a'?的字符的位置?i?。
  3. 如果整個字符串都是?'a'?(即?i == n?),那么將字符串的最后一個字符改為?'z'?并返回。
  4. 然后初始化另一個索引?j = i?,通過另一個?while?循環,從位置?i?開始找到第一個?'a'?的位置?j?。
  5. 對于從位置?i?到位置?j?的這部分子串,將每個字符的 ASCII 值減 1 ,得到新的子串。
  6. 最后將原始字符串的前?i?個字符、新生成的子串和位置?j?之后的字符拼接起來返回。

代碼實現:

優化前:
class Solution:def smallestString(self, s: str) -> str:# 如果字符串中沒有 'a'if s.count('a')==0:# 將字符串轉換為列表以便修改元素s,v = list(s),''# 遍歷列表,將每個字符的 ASCII 值減 1for i in range(len(s)):s[i] = chr(ord(s[i]) - 1) # 將修改后的列表元素重新組合成字符串for l in s: v += lelse:# 計算字符串中 'a' 的個數n = s.count('a')# 按 'a' 分割字符串并轉換為列表ls = list(s.split('a'))key = ''b = ''# 找到第一個非空的子串for k in ls:if k!= '':key = kb = kbreak# 如果沒有找到非空子串if key == '': return s[:-1] + 'z'# 將非空子串轉換為列表key = list(key)# 遍歷非空子串列表,將每個字符的 ASCII 值減 1for j in range(len(key)):key[j] = chr(ord(key[j]) - 1)p = ''# 將修改后的非空子串列表元素重新組合成字符串for l in key: p += l# 將修改后的非空子串放回原列表中ls[ls.index(b)] = pv = ''# 重新組合處理后的列表為字符串,并在適當位置插入 'a'for j in ls:if j == '' and n > 0:v += 'a'n -= 1else: v += jif n > 0:v += 'a'n -= 1# 如果處理后的字符串與原始字符串不同if v!= s:return v# 如果處理后的字符串與原始字符串相同,將最后一個字符改為 'z' 并返回return v[:-1] + 'z'


優化后:?
class Solution:def smallestString(self, s: str) -> str:n = len(s)i = 0while i < n and s[i] =='a':i +=1if i == n:return s[:-1] + "z"j = iwhile j< n and s[j] != 'a':j+=1return s[:i] + "".join(chr(ord(c) - 1) for c in s[i:j]) + s[j:]


??總結:

考點

  1. 字符串的遍歷和索引操作。
  2. 條件判斷(while?循環的條件)。
  3. 字符的 ASCII 值操作(通過?ord?和?chr?函數)。

收獲

  1. 加深了對字符串處理的理解,包括如何遍歷和根據條件提取子串。
  2. 學會了使用?ord?和?chr?函數來操作字符的 ASCII 值,實現對字符的修改。
  3. 掌握了通過多個索引和循環來處理字符串中特定部分的技巧。
  4. 提高了在處理復雜字符串問題時的邏輯思維和代碼實現能力。

“戀愛本質不是走向婚姻,而是探究最真實的自己。” ——《青春雜貨鋪》

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

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

相關文章

Java中的異常處理:Checked與Unchecked的區別

Java中的異常處理&#xff1a;Checked與Unchecked的區別 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 異常處理概述 在Java編程中&#xff0c;異常處理是一…

MySQL定位CPU利用率過高的SQL方法

前言 當mysql CPU告警利用率過高的時候&#xff0c;我們應該怎么定位是哪些SQL導致的呢&#xff0c;本文將介紹一下定位的方法。 本文所使用的方法&#xff0c;前提是你可以登錄到Mysql所在的服務器&#xff0c;執行命令查看進程&#xff0c;當然讓數據庫管理員登錄執行也可以…

科研所文件數據很關鍵,外發圖紙如何控制?

圖紙是科研所整個科研周期中最重要的資料類型之一。這些圖紙主要用于描述和記錄研究過程中的各種設計、實驗裝置、設備或產品原型等。 首先&#xff0c;科研所在進行新技術、新產品或新方法的研發時&#xff0c;通常需要進行詳細的設計和規劃。在這個過程中&#xff0c;科研人員…

小區物業管理收費系統源碼小程序

便捷、透明、智能化的新體驗 一款基于FastAdminUniApp開發的一款物業收費管理小程序。包含房產管理、收費標準、家屬管理、抄表管理、在線繳費、業主公告、統計報表、業主投票、可視化大屏等功能。為物業量身打造的小區收費管理系統&#xff0c;貼合物業工作場景&#xff0c;輕…

怎樣求解一個系統的穩態輸出

要求解一個系統的穩態輸出&#xff0c;需要根據系統的類型&#xff08;如線性時不變系統、非線性系統等&#xff09;、輸入信號的性質&#xff08;如階躍信號、正弦信號等&#xff09;以及系統的描述方法&#xff08;如微分方程、狀態空間模型等&#xff09;。這里主要介紹線性…

數字黃金 vs 全球計算機:比特幣與以太坊現貨 ETF 對比

撰文&#xff1a;Andrew Kang 編譯&#xff1a;J1N&#xff0c;Techub News 本文來源香港Web3媒體&#xff1a;Techub News 比特幣現貨 ETF 的通過為許多新買家打開了進入加密貨幣市場的大門&#xff0c;讓他們可以在投資組合中配置比特幣。但以太坊現貨 ETF 的通過&#xf…

AI從業者怎么做Science?清華大學AIR周浩:從文本生成到蛋白質設計的跨界探索

近日&#xff0c;北京智源大會「AI for Science」分論壇上&#xff0c;清華大學智能產業研究院副研究員周浩以「面向科學發現的生成式人工智能」為主題展開演講&#xff0c; HyperAI超神經在不違原意的前提下&#xff0c;對周浩教授的深度分享進行了整理匯總。 周浩教授演講現場…

遠程過程調用(RPC)

Hi~&#xff01;這里是奮斗的小羊&#xff0c;很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~~ &#x1f4a5;&#x1f4a5;個人主頁&#xff1a;奮斗的小羊 &#x1f4a5;&#x1f4a5;所屬專欄&#xff1a;C語言 &#x1f680;本系列文章為個人學習…

數字AI化銀行數字化轉型實戰手冊銀行數字化轉型大客戶營銷銷售講師培訓師唐興通談存量客戶理財金融科技與場景化

推動銀行數字化轉型的五個關鍵因素 推動銀行數字化轉型的五個關鍵因素&#xff1a; 客戶體驗。為客戶提供便利和個性化是數字化轉型的關鍵因素。銀行應開發和實施創新的數字渠道&#xff0c;例如移動應用程序、網上銀行、聊天機器人等&#xff0c;以方便獲取金融服務并提高客戶…

基于yolo的物體識別坐標轉換

一、模型簡介: 1.1、小孔成像模型簡圖如下:不考慮實際相機中存在的場曲、畸變等問題 相對關系為: 為了表述與研究的方便,我們將像面至于小孔之前,且到小孔的距離仍然是焦距f,這樣的模型與原來的小孔模型是等價的 相對關系為: 二、坐標系簡介: **世界坐標系(world coo…

2021-2024高校畢業生的就業趨勢和變化分析

一、不同行業、地區和學歷層次的高校畢業生就業情況差異 行業差異&#xff1a; 教育培訓行業&#xff1a;受“雙減”政策影響&#xff0c;教育培訓機構吸納畢業生的數量明顯下降&#xff0c;畢業生面臨重新選擇。互聯網領域&#xff1a;互聯網企業的業務優化調整力度加大&…

徹底解決 macos中chrome應用程序 的 無法更新 Chrome 彈窗提示 mac自定義參數啟動 chrome.app

mac系統中的chrome app應用在每次打開是都會提示一個 “無法更新 Chrome Chrome 無法更新至最新版本&#xff0c;因此您未能獲得最新的功能和安全修復程序。” &#xff0c; 然而最新的chrome 程序似乎在某些情況下居然會出現 輸入和顯示不一致的情況&#xff0c;暫時不想升…

You編程__封裝ElementPlus通用組件(會持續更新...)

YOU編程__封裝ElementPlus通用組件&#xff08;會持續更新…&#xff09; 1、通用表格組件 CommonTable.vue <template><div><el-form :model"query" inline class"query-form"><el-form-item><el-input v-model"query…

htmlcss面試題總結

網絡中使用最多的圖片格式有哪些 jpg, png, svg,webp,bmp; 請簡述css盒子模型 盒子模型是指html的每個元素都像一個盒子&#xff0c;可以設置寬高&#xff0c;主要由content box&#xff0c;padding box&#xff0c;border&#xff0c; 和margin組成 視頻/音頻標簽的使用 …

js棧的隊列

// 定義 Queue 類 class Queue {constructor() {// 使用兩個棧來模擬隊列this.stack1 [];this.stack2 [];}// 入隊操作&#xff0c;將元素添加到隊列末尾enqueue(element) {// 將 stack1 中的元素移到 stack2while (this.stack1.length > 0) {this.stack2.push(this.stack…

Kithara設置專用CPU

設置專用 CPU 目錄 設置專用 CPU 點擊WINDOWS R&#xff0c;運行對話框打開&#xff0c;輸入“msconfig”并確認確定。 現在會彈出一個對話框&#xff0c;您可以在其中更改 Windows 的某些設置。打開名為“引導”的第二個選項卡。 選擇要配置為使用專用模塊的操作系統。通常…

2024年道路運輸企業主要負責人試題

1、【多選題】下列關于客運車輛管理的說法中&#xff0c;正確的有( )。(ABCE) A、道路旅客運輸企業是客運車輛技術管理的責任主體。 B、道路運輸經營者應當建立車輛技術檔案制度&#xff0c;實行一車一檔。 C、車輛所有權轉移、轉籍時&#xff0c;車輛技術檔案應當隨車移交。…

移遠通信發布兩款Wi-Fi 6模組新品:率先采用亞馬遜ACK SDK for Matter方案實現互聯互通

6月26日 &#xff0c;在MWC上海展上&#xff0c;全球領先的物聯網整體解決方案供應商移遠通信聯合亞馬遜及上海博通現場宣布&#xff0c;推出支持亞馬遜Alexa Connect Kit &#xff08;ACK&#xff09;SDK for Matter方案的MCU Wi-Fi 6模組FLM163D和FLM263D。 后續&#xff0c;…

vite vue3使用axios解決跨域問題

引入依賴 npm install axios 在main.js中全局引入 import { createApp } from vue import App from ./App.vue import axios from axiosconst app createApp(App)// 全局引入axios app.config.globalProperties.$axios axiosapp.mount(#app) 修改vite.config.js的代理配置…

VBA 利用VBA查找Excel單元格內容備忘

What后的內容是要查找的文本。 lookat是查找的模式&#xff0c;xlWhole&#xff1a;是一致匹配查找&#xff0c;xlPart&#xff1a;是部分匹配查找。 需要注意的是需要判斷查找的Range是否存在&#xff0c;不進行判斷直接用的話容易發生錯誤。 Sub FindCell()Dim rngFind As…