代碼隨想錄二刷之“字符串”~GO

1.344. 反轉字符串 - 力扣(LeetCode)

func reverseString(s []byte)  {left := 0right := len(s)-1for left <= right{s[left],s[right] = s[right],s[left]left++right--}return
}

感悟:還是go語法熟練程度的問題,需要注意的是:?s[left],s[right] = s[right],s[left]這是go語言交換的常用寫法。或者也可以先轉換成rune切片 runes := []rune(s),最后再轉換回string(runes),因為string的底層是byte

2.541. 反轉字符串 II - 力扣(LeetCode)

func reverseStr(s string, k int) string {runes := []rune(s)n := len(runes)for i := 0;i<n;i += 2*k{if i+k >= n{reverse(runes[i:n])}else{reverse(runes[i:i+k])}}return string(runes)
}func reverse(runes []rune){i := 0j :=len(runes)-1for i<= j{runes[i],runes[j] = runes[j],runes[i]i++j--}
}

感悟:題目不難,復習了go語言的string可讀性,所以如果要操縱字符串,先要改寫成rune類型。同時函數傳參的時候也體現了切片的靈活性。runes[i:n]

3.54. 替換數字(第八期模擬筆試)

package main
import "fmt"func main(){var strByte []bytefmt.Scanln(&strByte)for i := 0;i<len(strByte);i++{if strByte[i]>='a'&&strByte[i]<='z'{continue}addbyte := []byte{'n','u','m','b','e','r'}strByte = append(strByte[:i],append(addbyte[:len(addbyte)],strByte[i+1:]...)...)i+=len(addbyte)-1}fmt.Println(string(strByte))
}

感悟:本道題不難,需要強化的是go語言append的語法,以及...的運用。...?(可變參數)本質上是一種 “語法糖”,自動將切片拆解為多個獨立元素,適配?append?的可變參數要求。

4.151. 反轉字符串中的單詞 - 力扣(LeetCode)

func reverseWords(s string) string {runes := []rune(s)//去除多余空格slow,fast:=0,0for len(runes) >0 && fast < len(runes) && runes[fast] == ' '{fast++}//頭部for ; fast < len(runes) ;fast++{if fast -1 >0 && runes[fast-1] == runes[fast] &&runes[fast] == ' '{continue}runes[slow] = runes[fast]slow++//伏筆}//有可能指向空格的下一位if runes[slow-1] == ' ' && slow -1 >0{runes = runes[:slow-1]}else{runes = runes[:slow]}reverse(runes) //翻轉整個字符串for i := 0; i < len(runes);i++{j := ifor ;j < len(runes)&&runes[j] != ' ';j++{}reverse(runes[i:j])i = j} return string(runes)
}func reverse(b []rune){left := 0right := len(b) - 1for left < right {b[left],b[right] = b[right],b[left]left++right--} 
}

感悟:本道題確實忘了,確實不記得了。嚴重需要三刷!!!總體思路:雙指針去空格,fast負責移動,slow負責賦值。好多細節。除此之外,先整體翻轉,再按單詞逐個翻轉。

5.55. 右旋字符串(第八期模擬筆試)

package main
import "fmt"func main(){var target intvar str string fmt.Scanln(&target)fmt.Scanln(&str)runes := []rune(str)reverse(runes[:len(runes)])reverse(runes[0:target])reverse(runes[target:len(runes)])fmt.Println(string(runes))
}
func reverse(b []rune){left := 0right := len(b) - 1for left < right {b[left],b[right] = b[right],b[left]left++right--} 
}

感悟:沒有任何難度,三次翻轉而已

6.28. 找出字符串中第一個匹配項的下標 - 力扣(LeetCode)

? ? ? ? ? ? ? ? 字符串匹配問題就要想到kmp

方法一:暴力解法就是遍歷他們的起始位置

func strStr(haystack string, needle string) int {n, m := len(haystack), len(needle)// 特殊情況:needle 為空字符串,返回 0(按題目約定)if m == 0 {return 0}// 若 haystack 長度小于 needle,直接返回 -1if n < m {return -1}// 遍歷所有可能的起始位置for i := 0; i <= n - m; i++ {// 檢查從 i 開始的子串是否與 needle 匹配match := truefor j := 0; j < m; j++ {if haystack[i+j] != needle[j] {match = falsebreak}}if match {return i}}// 未找到匹配return -1
}

方法二:KMP

func getNext(next []int,s string){j := 0 //最長公共前后綴next[0] = j//前綴表數組for i := 1;i<len(s);i++{for j>0 && s[i] != s[j]{j = next[j-1]}if s[i] == s[j]{j++}next[i] = j}
}func strStr(haystack string, needle string) int {n := len(needle)if n == 0{return 0}j := 0next := make([]int,n)getNext(next,needle)for i := 0;i<len(haystack);i++{for j > 0 && haystack[i] != needle[j]{j = next[j-1]//回退到前一位}if haystack[i] == needle[j]{j++}if j == n{return i - j +1}}return -1
}

感悟:kmp生疏了,但是簡單復習一遍之后,感覺更好理解了。

7.459. 重復的子字符串 - 力扣(LeetCode)

func repeatedSubstringPattern(s string) bool {n := len(s)if n == 0 {return false}j := 0next := make([]int, n)next[0] = jfor i := 1; i < n; i++ {for j > 0 && s[i] != s[j] {j = next[j-1]}if s[i] == s[j] {j++}next[i] = j}// next[n-1]  最長相同前后綴的長度if next[n-1] != 0 && n%(n-next[n-1]) == 0 {return true}return false
}

感悟:kmp的這兩個題確實都需要二刷了,第一個是字符串匹配的問題,第二個是字符串中是否出現重復子串。只不過第一個要建立next,然后利用模式串和文本串的不斷匹配去解決,j的含義不同。第二個相當于只建立next,然后通過next[n-1]去判斷是否是否重復出現。但是最后的那個判斷條件要熟能生巧。。。

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

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

相關文章

(!萬字血書!)文本預處理:NLP 版 “給數據洗澡” 指南

好吧&#xff0c;我承認我是個標題黨&#xff01;(不這樣你會點進來享受這篇 通俗易懂 的好文章嗎&#xff1f;) 正經標題&#xff1a;文本預處理全流程:從基礎到實踐 &#xff08;屏幕前的你&#xff0c;帥氣低調有內涵&#xff0c;美麗大方很優雅… 所以&#xff0c;求…

最新chrome瀏覽器elasticsearch-head無法安裝使用問題

chrome瀏覽器網址欄復制粘貼以下內容輸入回車 chrome://flags/#allow-legacy-mv2-extensions 找到Allow legacy extension manifest versions項右側選擇Enabled啟用&#xff0c;重啟瀏覽器即可。

CSS aspect-ratio 屬性

aspect-ratio 是 CSS 中用于控制元素寬高比的屬性&#xff0c;通過一行代碼即可實現響應式比例布局&#xff0c;無需復雜計算。它確保元素在不同屏幕尺寸下保持固定比例&#xff0c;提升響應式設計效率。一、基本語法與取值selector {aspect-ratio: <width> / <height…

FreeRTOS多核支持

個人博客&#xff1a;blogs.wurp.top 簡介 1. 多核支持概述 在傳統的單核系統中&#xff0c;FreeRTOS 通常運行在一個 CPU 核心上&#xff0c;負責任務調度、中斷處理和資源管理。然而&#xff0c;在多核系統中&#xff0c;多個核心可以并行執行不同的任務或線程&#xff0c…

CUDA中的基本概念

要學習cuda的同學相信已經對其有一定的了解了&#xff0c;至少直到它是干什么的了。這篇文章主要是對cuda編程中的主要概念進行總結&#xff0c;有了一個大致的輪廓后就好入手了。 異構架構 異構架構即使用CPU和GPU共同進行計算。GPU不能作為一個獨立的運行平臺&#xff08;程序…

【LINUX網絡】HTTP協議基本結構、搭建自己的HTTP簡單服務器

目錄 1. 初識HTTP 2. URL 2.1 基本結構 2.2 URL中的?與urldecode\urlencode 易混淆&#xff1a;URL和HTTP傳輸請求兩者是什么關系&#xff1f; HTTP的宏觀結構 3. DEMO CODE loop模塊&#xff0c;核心邏輯 HttpServer 初代版本&#xff08;DEMO 0.0&#xff09; DEMO 1.0 DEMO…

Spring Boot 靜態函數無法自動注入 Bean?深入解析與解決方案

在 Spring Boot 項目中&#xff0c;開發者常遇到一個典型問題&#xff1a;在靜態方法或靜態變量中嘗試使用 Autowired 注入 Bean 時&#xff0c;始終得到 null 值。本文將深入剖析這一問題的根源&#xff0c;并提供多種可靠解決方案。問題重現&#xff1a;為什么注入失敗&#…

存儲過程作為系統邏輯核心的架構思考 —— 以 SaaS 系統為例

在企業級系統尤其是 SaaS 架構中&#xff0c;技術選型一旦確定&#xff0c;就意味著底層數據庫類型基本不會輕易更換。既然如此&#xff0c;我們可以更大膽地將數據庫能力本身納入系統設計的核心&#xff0c;而不僅僅把它當成一個被動的存儲引擎。存儲過程&#xff08;Stored P…

Ubuntu20.04下Remmina的VNC密碼忘記后重置

你遇到的錯誤&#xff1a; ** error creating password: /home/ysc/.vnc/passwd storepasswd: No such file or directory說明&#xff1a;x11vnc -storepasswd 無法創建密碼文件&#xff0c;因為 .vnc 目錄不存在。 雖然你可能以為路徑是對的&#xff0c;但系統找不到 /home/y…

從“存得對”到“存得準”:MySQL 數據類型與約束全景指南

目錄 一、為什么需要數據類型與約束&#xff1f; 二、MySQL 數據類型全覽 1. 數值類型&#xff1a;精確 VS 近似 2. 日期時間類型&#xff1a;別讓“0000-00-00”出現 3. 字符串類型&#xff1a;CHAR、VARCHAR、TEXT、BLOB 4. JSON 類型&#xff1a;文檔與關系共舞 5. 空…

Effective C++ 條款42:了解 typename 的雙重含義

Effective C 條款42&#xff1a;了解typename的雙重含義 核心思想&#xff1a;在模板聲明中&#xff0c;typename和class可互換使用&#xff0c;但在模板內部&#xff0c;typename必須用于顯式指明嵌套從屬類型名稱&#xff08;nested dependent type name&#xff09;&#xf…

ENCOPIM, S.L. 參展 AUTO TECH China 2025 廣州國際汽車技術展覽會

ENCOPIM, S.L. 參展 AUTO TECH China 2025 廣州國際汽車技術展覽會2025年11月21-24日中國進出口商品交易會展館D區(廣州)AUTO TECH China 2025同期&#xff1a;第二十三屆廣州車展即將盛大開幕展商推薦ENCOPIM, S.L.展位號&#xff1a;3916企業簡介&#xff1a;ENCOPIM, S.L.于…

30 HTB Soccer 機器 - 容易

主要知識點 第一階段&#xff1a;偵查 nmap nmap快速掃描&#xff1a; oxdfhacky$ nmap -p- --min-rate 10000 10.10.11.194 Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-04 13:32 EDT Nmap scan report for 10.10.11.194 Host is up (0.093s latency). Not shown:…

阿里云機器翻譯接口SDK-RAM權限配置

用戶授權翻譯權限在數字化時代&#xff0c;短信作為企業與用戶溝通的重要橋梁&#xff0c;其高效、可靠的送達直接影響業務轉化與用戶體驗。SDK&#xff08;軟件開發工具包&#xff09;的出現極大簡化了短信功能的集成過程&#xff0c;讓開發者能夠快速在應用中嵌入短信驗證、通…

ESXI 6.7服務器時間錯亂問題

1. 設置ESXI服務器&#xff1a;在此主機上手動配置日期和時間管理-服務-ntpd-鼠標右鍵-策略-手動啟動和停止&#xff0c;狀態已停止管理-系統-時間和日期-編輯設置-檢查是否選擇了【在此主機上手動配置日期和時間】ntp服務狀態已停止ntp服務器已停止2. 停止所有虛擬機自動更新時…

CV 醫學影像分類、分割、目標檢測,之【皮膚病分類】項目拆解

CV 醫學影像分類、分割、目標檢測&#xff0c;之【皮膚病分類】項目拆解第1-12行&#xff1a;導入庫第14-17行&#xff1a;讀取標簽文件第19-21行&#xff1a;獲取疾病名稱第23-26行&#xff1a;獲取圖片名列表第28-35行&#xff1a;篩選有標簽的圖片第38-43行&#xff1a;提取…

【JavaEE】多線程 -- 線程狀態

目錄六大狀態舉例說明六大狀態 New 新建狀態&#xff1a;線程還沒出創建&#xff0c;只有Thread 實例化的對象&#xff0c;調用start 方法之前的狀態。Runnable 運行狀態&#xff1a;被系統調度后&#xff0c;CPU 正在執行的&#xff0c;Ready 就緒態&#xff0c;系統調度&…

網絡流初步

網絡流初步 文章目錄網絡流初步概念介紹最大流費用流概念介紹 網絡流不同之處在于它的本質圖論&#xff0c;但是把圖論的某些概念換了一個說法而已&#xff0c;初步只要了解網絡流的各個概念就可以明白的很快。 下述概念是本人自己定義的&#xff0c;對于網絡流的題目做的還不…

[系統架構設計師]系統架構基礎知識(一)

[系統架構設計師]系統架構基礎知識&#xff08;一&#xff09; 一.計算機系統基礎知識 1.計算機系統概述 硬件軟件及網絡組成的系統 2.計算機硬件基礎知識 馮 諾依曼結構&#xff1a;運算器&#xff0c;控制器&#xff0c;存儲器&#xff0c;輸入設備&#xff0c;輸出設備 專用…

深入解析Java代理模式:靈活控制對象訪問的核心技術

在日常開發中&#xff0c;我們常遇到這樣的場景&#xff1a;需要控制對象訪問權限、優化高成本操作&#xff0c;或給方法添加額外功能&#xff08;如日志、事務&#xff09;。代理模式&#xff08;Proxy Pattern&#xff09; 正是解決這類問題的金鑰匙。作為結構型設計模式的代…