力扣-151. 反轉字符串中的單詞

文章目錄

  • 看下去,你一定可以理解此題,寫的簡單易懂
  • 力扣題目
  • 解題思路
  • 函數構成
    • 1.反轉函數
    • 2.消除掉多余空格函數
  • 整體函數

看下去,你一定可以理解此題,寫的簡單易懂

力扣題目

給你一個字符串 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.通過removeElement函數來去掉字符串中多余的0;
2.通過revise函數先反轉整個字符串;
3.在反轉每一個單詞,就達到了題目中的要求。
(反轉每一個單詞過程可以參考我的此篇文章-力扣-557. 反轉字符串中的單詞 III)

函數構成

1.反轉函數

void revise(char* start, char* end)
{char temp;while (start < end){temp = *end;*end = *start;*start = temp;start++;end--;}
}

只需要輸入反轉的起始地址和終止地址即可完成反轉

2.消除掉多余空格函數

int removeElement(char* str, int len, int val)
{int slow = 0; //慢指針int fast = 0; //快指針for (fast = 0; fast < len; fast++){if (val != str[fast])/*如果不是空格就賦值*/{if (slow != 0)/*確保字符串的最前邊沒有空格*/{str[slow] = ' ';slow++;}}while ((fast < len) && str[fast] != val)/*快指針遍歷一個完整的單詞賦值給慢指針*/{str[slow] = str[fast];slow++;fast++;}}str[slow] = '\0';return slow;
}

整體函數

void revise(char* start, char* end)
{char temp;while (start < end){temp = *end;*end = *start;*start = temp;start++;end--;}
}
int removeElement(char* str, int len, int val)
{int slow = 0; //慢指針int fast = 0; //快指針for (fast = 0; fast < len; fast++){if (val != str[fast])/*如果不是空格就賦值*/{if (slow != 0)/*確保字符串的最前邊沒有空格*/{str[slow] = ' ';slow++;}}while ((fast < len) && str[fast] != val)/*快指針遍歷一個完整的單詞賦值給慢指針*/{str[slow] = str[fast];slow++;fast++;}}str[slow] = '\0';return slow;
}char* reverseWords(char* s)
{char* start = NULL;char* end = NULL;int len = strlen(s);int i = 0;/*取得移除多余0后字符串的長度*/len = removeElement(s, len, ' ');/*反轉全部字符串*/revise(&s[0], &s[len - 1]);/*反轉每一個單詞*/start = s;/*字符串首地址賦值*/for (i = 0; i < len; i++){if (s[i] == ' '){end = &s[i];/*記錄空格的位置*/revise(start, end - 1);start = end + 1;/*記錄空格后字符的位置*/}else if (s[i + 1] == '\0')/*最后一個單詞特殊處理*/{end = &s[i];revise(start, end);start = NULL;}}return s;
}

如果有需要可以跳轉leetcode直接看我提交的解題:151. 反轉字符串中的單詞

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

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

相關文章

京東商品詳情數據在數據分析行業中的重要性

京東商品詳情數據在數據分析行業中具有重要作用。這些數據提供了豐富的信息&#xff0c;可以幫助企業了解市場趨勢、消費者需求、產品表現以及運營策略等多個方面。 首先&#xff0c;京東商品詳情數據可以為企業提供市場趨勢分析的依據。通過觀察商品的銷售量、銷售額、價格等…

c語言:理解和避免野指針

野指針的定義&#xff1a; 野指針是指一個指針變量存儲了一個無效的地址&#xff0c;通常是一個未初始化的指針或者指向已經被釋放的內存地址。當程序嘗試使用野指針時&#xff0c;可能會導致程序崩潰、內存泄漏或者其他不可預測的行為。因此&#xff0c;在編程中需要特別注意…

Pandas中DataFrame對象的創建與常用屬性方法(第2講)

Pandas中DataFrame對象的創建與常用屬性方法(第2講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ???????????????????????????????????????????????????????????????????????????…

智能優化算法應用:基于孔雀算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于孔雀算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于孔雀算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.孔雀算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

[足式機器人]Part2 Dr. CAN學習筆記-數學基礎Ch0-2 特征值與特征向量

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN學習筆記-數學基礎Ch0-2 特征值與特征向量 1. 定義1.1 線性變換1.2 求解特征值&#xff0c;特征向量1.3 應用&#xff1a;對角化矩陣——解耦Decouple 2. Summary 1. 定義 A v ? λ v ? A\vec{v}\lambd…

【網絡奇緣】- 計算機網絡|深入學習物理層|網絡安全

? &#x1f308;個人主頁: Aileen_0v0&#x1f525;系列專欄: 一見傾心,再見傾城 --- 計算機網絡~&#x1f4ab;個人格言:"沒有羅馬,那就自己創造羅馬~" 回顧鏈接&#xff1a;http://t.csdnimg.cn/ZvPOS 這篇文章是關于深入學習原理參考模型-物理層的相關知識點&…

Linux權限命令詳解

Linux權限命令詳解 文章目錄 Linux權限命令詳解一、什么是權限&#xff1f;二、權限的本質三、Linux中的用戶四、linux中文件的權限4.1 文件訪問者的分類&#xff08;人&#xff09;4.2 文件類型和訪問權限&#xff08;事物屬性&#xff09; 五、快速掌握修改權限的做法【第一種…

Spark-Streaming+Kafka+mysql實戰示例

文章目錄 前言一、簡介1. Spark-Streaming簡介2. Kafka簡介二、實戰演練1. MySQL數據庫部分2. 導入依賴3. 編寫實體類代碼4. 編寫kafka主題管理代碼5. 編寫kafka生產者代碼6. 編寫Spark-Streaming代碼總結前言 本文將介紹一個使用Spark Streaming和Kafka進行實時數據處理的示例…

實戰1-python爬取安全客新聞

一般步驟&#xff1a;確定網站--搭建關系--發送請求--接受響應--篩選數據--保存本地 1.拿到網站首先要查看我們要爬取的目錄是否被允許 一般網站都會議/robots.txt目錄&#xff0c;告訴你哪些地址可爬&#xff0c;哪些不可爬&#xff0c;以安全客為例子 2. 首先測試在不登錄的…

Docker Network(網絡)——8

目錄&#xff1a; Docker 為什么需要網絡管理Docker 網絡架構簡介 CNMLibnetwork驅動常見網絡類型 bridge 網絡host 網絡container 網絡none 網絡overlay 網絡docker 網絡管理命令 docker network createdocker network inspectdocker network connectdocker network disconne…

class072 最長遞增子序列問題與擴展【算法】

class072 最長遞增子序列問題與擴展【算法】 code1 300. 最長遞增子序列 // 最長遞增子序列和最長不下降子序列 // 給定一個整數數組nums // 找到其中最長嚴格遞增子序列長度、最長不下降子序列長度 // 測試鏈接 : https://leetcode.cn/problems/longest-increasing-subsequen…

830. 單調棧

?????? ??????830. 單調棧 - AcWing題庫 給定一個長度為 N 的整數數列&#xff0c;輸出每個數左邊第一個比它小的數&#xff0c;如果不存在則輸出 ?1?1。 輸入格式 第一行包含整數 N&#xff0c;表示數列長度。 第二行包含 N個整數&#xff0c;表示整數數列…

你知道MySQL中 group by 怎么優化嗎

更好的閱讀體驗&#xff0c;請點擊 YinKai s Blog。 ? 在 MySQL 中 group by 用于按照一個或多個列對結果集進行分組。在討論 group by 怎么優化之前&#xff0c;我們先來看看 group by 的執行流程&#xff0c;這樣我們才能對癥下藥。 group by 執行流程 ? 我們先用下面的 …

Ubuntu 18.04使用Qemu和GDB搭建運行內核的環境

安裝busybox 參考博客&#xff1a; 使用GDBQEMU調試Linux內核環境搭建 一文教你如何使用GDBQemu調試Linux內核 ubuntu22.04搭建qemu環境測試內核 交叉編譯busybox 編譯busybox出現Library m is needed, can’t exclude it (yet)的解釋 S3C2440 制作最新busybox文件系統 https:…

block-recurrent-transformer-pytorch 學習筆記

目錄 有依賴項1&#xff1a; 沒有依賴項&#xff0c;沒有使用例子 沒有依賴項2&#xff1a; 有依賴項1&#xff1a; GitHub - dashstander/block-recurrent-transformer: Pytorch implementation of "Block Recurrent Transformers" (Hutchins & Schlag et a…

gd32和stm32的區別

gd32和stm32的區別 現在的市場上有很多種不同類型的微控制器&#xff0c;其中比較常見的有兩種&#xff0c;即gd32和stm32。兩種微控制器都是中國和歐洲的兩個公司分別推出的&#xff0c;但是它們之間有很多區別&#xff0c;本文將會深入探討這些區別。 1.起源和歷史 gd32是…

2024年網絡安全競賽-Web安全應用

Web安全應用 (一)拓撲圖 任務環境說明: 1.獲取PHP的版本號作為Flag值提交;(例如:5.2.14) 2.獲取MySQL數據庫的版本號作為Flag值提交;(例如:5.0.22) 3.獲取系統的內核版本號作為Flag值提交;(例如:2.6.18) 4.獲取網站后臺管理員admin用戶的密碼作為Flag值提交…

udp多播組播

import socket ,struct,time# 組播地址和端口號 MCAST_GRP 239.0.0.1 MCAST_PORT 8888 # 創建UDP socket對象 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 綁定socket對象到本地端口號 # sock.bind((MCAST_GRP, MCAST_PORT)) …

【4】PyQt輸入框

1. 單行文本輸入框 QLineEdit控件可以輸入單行文本 from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sysdef init_widget(w: QWidget):# 修改窗口標題w.setWindowTitle(單行輸…