LeetCode題練習與總結:反轉字符串中的單詞--151

一、題目描述

給你一個字符串?s?,請你反轉字符串中?單詞?的順序。

單詞?是由非空格字符組成的字符串。s?中使用至少一個空格將字符串中的?單詞?分隔開。

返回?單詞?順序顛倒且?單詞?之間用單個空格連接的結果字符串。

注意:輸入字符串?s中可能會存在前導空格、尾隨空格或者單詞間的多個空格。返回的結果字符串中,單詞間應當僅用單個空格分隔,且不包含任何額外的空格。

示例 1:

輸入:s = "the sky is blue"
輸出:"blue is sky the"

示例 2:

輸入:s = " ?hello world ?"
輸出:"world hello"
解釋:反轉后的字符串中不能存在前導空格和尾隨空格。

示例 3:

輸入:s = "a good ? example"
輸出:"example good a"
解釋:如果兩個單詞間有多余的空格,反轉后的字符串需要將單詞間的空格減少到僅有一個。

提示:

  • 1 <= s.length <= 10^4
  • s?包含英文大小寫字母、數字和空格?' '
  • s?中?至少存在一個?單詞

二、解題思路

  1. 首先,我們需要去除字符串s的前導空格和尾隨空格,同時將字符串中間多余的空格縮減為一個空格。
  2. 然后,我們將整個字符串反轉。
  3. 接下來,我們需要遍歷反轉后的字符串,將每個單詞反轉回原來的順序。

三、具體代碼

class Solution {public String reverseWords(String s) {// 去除前導和尾隨空格,并將中間多余空格縮減為一個空格StringBuilder sb = trimSpaces(s);// 反轉整個字符串reverse(sb, 0, sb.length() - 1);// 反轉每個單詞reverseEachWord(sb);return sb.toString();}private StringBuilder trimSpaces(String s) {int left = 0, right = s.length() - 1;// 去除前導空格while (left <= right && s.charAt(left) == ' ') left++;// 去除尾隨空格while (left <= right && s.charAt(right) == ' ') right--;// 將中間多余空格縮減為一個空格StringBuilder sb = new StringBuilder();while (left <= right) {char c = s.charAt(left);if (c != ' ') {sb.append(c);} else if (sb.charAt(sb.length() - 1) != ' ') {sb.append(c);}left++;}return sb;}private void reverse(StringBuilder sb, int start, int end) {while (start < end) {char temp = sb.charAt(start);sb.setCharAt(start, sb.charAt(end));sb.setCharAt(end, temp);start++;end--;}}private void reverseEachWord(StringBuilder sb) {int n = sb.length();int start = 0, end = 0;while (start < n) {// 循環至單詞的末尾while (end < n && sb.charAt(end) != ' ') end++;// 翻轉單詞reverse(sb, start, end - 1);// 更新start,去找下一個單詞end++;start = end;}}
}

四、時間復雜度和空間復雜度

1. 時間復雜度
  • trimSpaces?方法:這個方法遍歷了整個字符串一次,所以時間復雜度是 O(n),其中 n 是字符串的長度。
  • reverse?方法:這個方法是用來翻轉字符串的一部分,它的時間復雜度是 O(m),其中 m 是要翻轉的部分的長度。
  • reverseEachWord?方法:這個方法遍歷了整個字符串一次,并且在每個單詞上調用了一次?reverse?方法。假設單詞的平均長度是 k,那么這個方法的時間復雜度是 O(n + k),其中 n 是字符串的長度,k 是單詞的平均長度。

綜合起來,整個算法的時間復雜度是 O(n + k),因為?trimSpaces?和?reverseEachWord?都是遍歷整個字符串,而?reverse?是在單個單詞上操作,所以單詞的總長度是 n。

2. 空間復雜度
  • trimSpaces?方法:這個方法創建了一個新的 StringBuilder 來存儲處理后的字符串,所以空間復雜度是 O(n),其中 n 是字符串的長度。
  • reverse?方法和?reverseEachWord?方法:這兩個方法都是原地操作,沒有使用額外的空間,所以它們的空間復雜度是 O(1)。

綜合起來,整個算法的空間復雜度是 O(n),因為?trimSpaces?方法創建了一個新的 StringBuilder 來存儲處理后的字符串。

五、總結知識點

  1. 字符串處理:對字符串進行遍歷、去除前后空格、縮減中間多余空格等操作。

  2. StringBuilder 類的使用:StringBuilder 是一個可變的字符序列,用于高效地拼接字符串、修改字符串內容等。

  3. 字符串反轉:通過交換字符串首尾字符的位置,實現字符串的反轉。

  4. 循環和條件語句:使用 while 循環和 if 條件語句來控制程序的邏輯流程。

  5. 字符數組與字符串的轉換:StringBuilder 在內部維護一個字符數組,可以通過 append 方法添加字符,最終通過 toString 方法轉換為字符串。

  6. 邊界條件處理:在去除前后空格和反轉字符串時,需要考慮字符串為空或只有一個字符的邊界情況。

  7. 函數封裝:將去除空格、反轉字符串、反轉每個單詞等功能封裝成單獨的函數,提高代碼的可讀性和可維護性。

  8. 指針或索引的使用:在遍歷字符串時,使用指針或索引來跟蹤當前處理的位置。

以上就是解決這個問題的詳細步驟,希望能夠為各位提供啟發和幫助。

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

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

相關文章

速盾:好的cdn服務器

CDN&#xff08;Content Delivery Network&#xff09;是指內容分發網絡&#xff0c;是一種將網站的靜態內容&#xff08;如圖片、音頻、視頻&#xff09;緩存在分布式的服務器節點上&#xff0c;通過就近訪問用戶的請求&#xff0c;提供快速可靠的內容傳輸服務的技術。 好的C…

HTML5文本標簽、圖像標簽、超鏈接

一、文本樣式標簽 字體樣式標簽&#xff1a; 加粗&#xff1a;<strong>…</strong> 斜體&#xff1a; < em >…</ em> eg&#xff1a; <h3>徐志摩人物簡介</h3> <p> <strong>1910</strong>年入杭州學堂<br/> &l…

微信小程序 - 本地存儲 增加有效期

小程序的本地存儲API提供了wx.setStorageSync和wx.setStorage來存儲數據&#xff0c;注意的是&#xff0c;小程序的本地存儲并沒有明確的有效期設置&#xff0c;存儲的數據在不超過限制的情況下&#xff0c;會一直保留。 一、小程序本地存儲API 小程序的本地存儲API提供了設置…

WEB06JavaScriptAjax

基礎語法 引入方式 引入方式 內部腳本&#xff1a;將JS代碼定義在HTML頁面中 JavaScript代碼必須位于<script></script>標簽之間 在HTML文檔中&#xff0c;可以在任意地方&#xff0c;放置任意數量的<script> 一般會把腳本置于<body>元素的底部&a…

常見的氣體流量計有哪些?

1.氣體渦輪流量計 適用場合&#xff1a;流量變化小&#xff0c;脈動流頻率小&#xff0c;中低壓潔凈天然氣優點 1.精度高&#xff0c;重復性好 2.測量范圍廣&#xff0c;壓損小&#xff0c;安裝維修方便 3.具有較高的抗電磁干擾和抗震動能力缺點&#xff1a;分辨率低&#xff…

活動:不要卷模型,要卷應用

如何理解李彥宏說的“不要卷模型&#xff0c;要卷應用” 1. 現狀 現如今&#xff0c;是否具備獨立的 AI 技術似乎已經成為衡量一個互聯網企業是否成功的標志。各家都在竭盡全力卷模型、卷數據、卷訓練效果&#xff0c;市面上僅是語言類 AI 就多達十幾種&#xff0c;但從一名消…

瀏覽器中js外掛腳本的執行方式

1、開發工具控制臺交互執行 網頁中按F12打開開發者工具&#xff0c;選擇“控制臺”&#xff0c;鍵入js腳本命令回車執行&#xff0c;適用于臨時使用腳本邏輯簡單的場景&#xff0c;實例如下&#xff1a; // 獲取網頁元素的文本腳本 var elem document.getElementById("…

2-添加庫

本節將學習如何在項目中創建和使用庫&#xff0c;還將看到如何使庫的使用成為可選的。 本節中使用的示例代碼下載見step1-簡單開始cmake實踐-CSDN博客。 練習1 -創建一個庫 要在CMake中添加一個庫&#xff0c;使用add_library()命令并指定哪些源文件應該組成該庫。 我們可…

接入應用內支付服務,提高商業變現效率

在當今競爭激烈的移動應用市場中&#xff0c;開發者們面臨著提升應用商業變現能力的挑戰。用戶體驗的流暢性和支付的安全性至關重要。 HarmonyOS SDK應用內支付服務&#xff08;IAP Kit&#xff09;為開發者提供了一站式的解決方案&#xff0c;簡化了應用內支付的接入流程&…

C嘎嘎:類和對象(一)

目錄 面向過程和面向對象的初步認識 類的引入 類的定義 類的訪問限定符及封裝 訪問限定符 封裝 類的作用域 類的實例化 類對象模型 如何計算類對象大小 結構體內存對齊規則 this指針 this指針的引出 this指針的特性 類的6個默認成員函數 構造函數 概念 特性 …

喜訊丨美格智能通過國際EcoVadis平臺認證企業社會責任并榮獲承諾獎章,彰顯可持續發展實力

作為全球領先的無線通信模組及解決方案提供商&#xff0c;美格智能在社會責任領域再創新高。近日&#xff0c;美格智能憑借在企業社會責任和可持續性采購發展方面的卓越表現&#xff0c;通過國際在線權威評價機構EcoVadis對公司環境、勞工與人權、商業道德、可持續采購等方面審…

根據空格、制表符、回車符等分割字符串re.split

【小白從小學Python、C、Java】 【考研初試復試畢業設計】 【Python基礎AI數據分析】 根據空格、制表符、 回車符等分割字符串 re.split [太陽]選擇題 根據給定的Python代碼&#xff0c;哪個選項是正確的&#xff1f; import re pattern r\s print(f"【顯示】pattern{…

高清圖片壓縮無水印小程序源碼系統 前后端分離 帶完整的安裝代碼包以及搭建教程

系統概述 在當今的數字化時代&#xff0c;圖片作為信息傳播的重要載體&#xff0c;其質量和傳輸效率直接影響到用戶體驗。然而&#xff0c;高清圖片往往伴隨著較大的文件體積&#xff0c;這不僅會占用大量存儲空間&#xff0c;還會拖慢網頁或應用的加載速度。因此&#xff0c;…

熱烈祝賀!全視通多家客戶上榜全球自然指數TOP100!

2024年6月18日&#xff0c;全球醫療機構自然指數TOP100榜單發布&#xff0c;中國醫療機構在其中的表現尤為引人注目。 根據《自然》雜志網站發布的數據&#xff0c;此次公布的排名是基于&#xff08;2023年3月1日至2024年2月29日&#xff09;的統計數據&#xff0c;全球醫療機構…

Python在網絡爬蟲和數據抓取中的應用

Python在網絡爬蟲和數據抓取中的應用 引言 在數字化時代&#xff0c;數據的價值日益凸顯。無論是市場趨勢分析&#xff0c;還是個人偏好預測&#xff0c;數據都扮演著至關重要的角色。Python&#xff0c;作為一種功能強大、語法簡潔的編程語言&#xff0c;為數據的獲取、處理…

旗晟機器人AI智能算法有哪些?

在當今迅猛發展的工業4.0時代&#xff0c;智能制造和自動化運維已然成為工業發展至關重要的核心驅動力。伴隨技術的持續進步&#xff0c;工業場景中的運維巡檢已不再單純地依賴于傳統的人工運維方式&#xff0c;而是愈發多地融入了智能化的元素&#xff0c;其中智能巡檢運維系統…

前端Din字體和造字工房力黑字體文件

Din 字體是一種經典的、簡潔的無襯線字體&#xff0c;它源自1930年代的德國交通標志設計。 造字工房力黑字體適用于數字&#xff0c;駕駛艙標題等統計界面 DIN-Medium.otf 案例 造字工房力黑.TTF 案例

記錄一次MySql鎖等待 (Lock wait timeout exceeded)異常

[TOC](記錄一次MySql鎖等待 (Lock wait timeout exceeded)異常) Java執行一個SQL查詢未提交&#xff0c;遇到1205錯誤。 java.lang.Exception: ### Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transactionCluster…

動手學深度學習6.2 圖像卷積-筆記練習(PyTorch)

以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;卷積層_嗶哩嗶哩_bilibili 代碼_嗶哩嗶哩_bilibili 本節教材地址&#xff1a;6.2. 圖像卷積 — 動…

Python使用watchdog庫實現監控文件系統的更改

1. 先下載對應庫&#xff1a; pip install watchdog import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandlerclass FileChangeHandler(FileSystemEventHandler):def on_modified(self, event):# 當文件被修改時觸發此方法…