算法考題 替換空格

參考鏈接

  • letcode官網題目地址

題目要求:

  • 請實現一個函數,把字符串 s 中的每個空格替換成"%20"。

示例 1:

輸入:s = "We are happy."
輸出:"We%20are%20happy."

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

解決思路

時間復雜度為O(n^2)

  • 如果在先前的字符串上進行替換,就很有可能會覆蓋修改該字符串后面的內存。如果創建新的字符串,并在新的字符串上進行替換,需要分配足夠多的內存,
  • 時間復雜度為O(n^2)的解法,不足以拿到offer:最low的做法是從頭開始掃描字符串,遇到空格就進行替換,將1個空格替換成%20,那么會造成數據的多次移動,時間復雜度很高,但是占據的內存很小,在原有的字符串上進行更改。

時間復雜度是O(n)

  • 每次替換空格,長度會增加2位,因此替換之后的長度等于先前的長度加上2*空格的數目
  • 設置兩個指針,因為從0開始讀取字符串,old指針第一個指針指向先前舊的字符串的長度 - 1 的位置,第二個指針new指向新的字符串 的長度減一的位置。
  • 如果old指針指向的位置是空格的話,new指針移動三次,添加”%20“,然后old移動一次
  • 如果old指針指向的位置不是空格的話,new和old指針分別移動一次,實現數據的拷貝
  • 相對于第一種方式,減少了對相同數據的拷貝次數

代碼

    std::string replaceSpace(std::string s) {int old_length = s.length();if (old_length == 0){return s;}int count = 0;for (int i = 0; i < old_length; ++i) {if (s[i] == ' '){count++;}}int new_length = old_length + 2*count - 1;int original_index = old_length - 1;int new_index = new_length;s += std::string(2*count,' ');while (original_index >= 0 && new_index > original_index){if (s[original_index] == ' '){s[new_index--] = '0';s[new_index--] = '2';s[new_index--] = '%';} else{s[new_index--] = s[original_index];}--original_index;}return s;}

?

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

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

相關文章

Python學習2 條件判斷語句if,循環語句for while

順序&#xff0c;分支&#xff0c;循環結構 條件判斷語句if 1&#xff09;if…else… 2) if…elif…else 注意&#xff1a; 1&#xff09;python中不支持switch…case語句 2&#xff09;注意縮進&#xff01; 3&#xff09;區間范圍內允許連續比較&#xff1a; if 1<2<…

使用VS2019創建項目,添加文件和庫地址

1&#xff0c;創建項目的類型很重要&#xff0c;fisherman服務器密碼機使用C語言進行開發&#xff0c;只可以使用控制臺應用 將需要的頭文件拷貝到新建的工程里面 然后&#xff0c;打開解決方案資源管理器&#xff0c;點擊添加&#xff0c;添加現有項&#xff0c;選中拷貝的頭…

java -web html5學習1

基礎標簽 <!--html5聲明--> <!DOCTYPE html> <!--html標簽--> <html lang"en"> <!--文檔頭--> <head> <!--告知瀏覽器此頁面屬于什么字符編碼格式,--><meta charset"UTF-8"> <!-- 用于標識當前網頁的…

中科大 計算機網絡2 什么是互聯網

概論 互聯網 1&#xff09;網絡–包括節點和邊&#xff0c;與大小無關&#xff0c;如蜘蛛網&#xff0c;大腦神經元。。 下圖的網絡是一樣的 2&#xff09;計算機網絡 聯網的計算機所構成的系統 包括主機節點&#xff08;筆記本&#xff0c;ipad,手機&#xff0c;聯網的冰箱等…

虛擬機下Ubuntu配置IP地址和網段

服務器密碼機的地址是172.27.120.99 ubuntu系統的IP地址是192.168.133.138&#xff0c;使用net方式和主機共享網絡。現需要修改ip地址 第一步&#xff0c;net方式是不對的&#xff0c;需要選擇橋接方式&#xff0c;復制物理連接狀態 然后修改主機的物理連接&#xff0c;選擇搜…

漁翁服務器密碼機的環境配置

Linux版本 需要將配置文件 FMDevice.conf 存儲到 /etc目錄下需要將庫文件 libfmapiv100.so 存儲到 /lib64目錄下編譯的命令 gcc main.c ./libfmapiv100.so -lpthread -o test 需要指定 ./libfmapiv100.so&#xff0c;如果需要別的庫也需要進行指定&#xff0c;比如…

王道考研 計算機網絡1 計算機網絡概念,組成,功能和分類

計算機網絡概念&#xff0c;組成&#xff0c;功能和分類 怎樣學習計算機網絡 計算機網絡概念 1&#xff09;網絡和計算機網絡區別 網絡包含計算機網絡&#xff08;是通信技術和計算機技術相結合的產物&#xff09; 2&#xff09;計算機網絡的概念 分散的&#xff1a;指地理位…

ubuntu 修改旋轉屏幕顯示方向 恢復正常模式

參考鏈接 https://blog.csdn.net/YYshuangshuang/article/details/90576997 使用命令如下 xrandr -o normal 回到正常角度

王道考研 計算機網絡2 標準化工作

標準化工作 要實現不同廠商的硬軟件之間相互連通&#xff0c;必須遵從統一的標準 標準的分類&#xff1a; 法定標準&#xff1a;國內外 RFC請求評論 RFC請求評論–因特網標準 是一個因特網標準就一定是RFC形式&#xff0c;但不是所有的RFC都是因特網標準 之前的階段&#…

二叉搜索樹判定

leetcode的原文鏈接樹的定義C版本 需要給每一個節點的數值劃分范圍若任意節點的左子樹不空&#xff0c;則左子樹上所有結點的值均小于它的根結點的值&#xff1b;任意節點的右子樹不空&#xff0c;則右子樹上所有結點的值均大于它的根結點的值&#xff1b;任意節點的左、右子樹…

王道考研 計算機網絡3 速率相關的性能指標

速率 指快慢 比特&#xff1a;1/0&#xff08;1位比特&#xff09; 速率&#xff1a;單位換算1000倍&#xff08;小寫b&#xff09;&#xff0c;如&#xff0c;b/s比特每秒&#xff1b;kb/s千比特每秒 存儲容量&#xff1a;單位換算1024倍(大寫B)&#xff0c;如B字節&#xf…

C++ limits頭文件的用法numeric_limits

參考鏈接 Cplus plus參考鏈接numeric_limits<double>::max ()是函數&#xff0c;返回編譯器允許的 double 型數 最大值。類似的 numeric_limits<int>::max () 返回 編譯器允許的 int 型數 最大值。需包含頭文件 #include <limits> imits是STL提供的頭文件&…

Linux系統運維1 運維 項目研發 網站 服務器 計算機基礎 Linux操作系統

運維的基本概念 運維行業前景 企業運作模式 四大部門 項目研發流程 職責描述&#xff1a; 運維的作用&#xff1a; 網站的相關概念 網站運行流程&#xff1a; IP<–>域名 重要概念&#xff1a; 服務器圖片&#xff1a; 服務器&#xff1a;為用戶提供服務的機器&…

Linux 時間函數的使用

頭文件 #include <chrono> #include <functional>namespace hsm { namespace common {class Timer { public:Timer();void reset();long peek_us() const;long peek_ms() const;double peek_msf() const;double record_msf(const std::function<void()> &am…

王道考研 計算機網絡4 速率相關的性能指標

時延 發送時延; 發送時延;10bit 除以10b/s1s 傳播時延&#xff1a; 100 m除以10m/s10s 當信道寬帶提高&#xff08;發送速率&#xff09;&#xff0c;發送時延減少&#xff0c;但并不會提高傳播時延–高速鏈路情況 總&#xff1a; 時延帶寬積 描述數據量&#xff0c;鏈路…

std::chrono::duration_cast時間計算

參考鏈接 std::chrono::duration_cast

王道考研 計算機網絡5 分層結構 協議 服務 接口

引入;發送文件前要準備的工作 分層的基本原則 分層結構中相關的概念 PCISDUPDU 上一層的PDU作為傳給下一層的SDU,傳輸下去 總結

std::future詳解

參考鏈接 cppreference.comC11之std::future對象使用說明

王道考研 計算機網絡6 OSI參考模型和各層作用

計算機網絡分層結構 OSI參考模型發展史 OSI參考模型 記憶&#xff1a;一個叫淑惠的女生試用物聯網 OSI參考模型解釋通信過程 具體操作 H代表頭部 數據鏈路層;加了頭部H2和尾部T2 物理層對數據不再處理 類似包裹;打包和拆包 應用層 如果可以不聯網也能使用的程序就不屬于…

std::reserves使用

參考鏈接 C容器使用reserve的重要性&#xff0c;以及如何釋放多余內存關于vector的擴容機制