【算法訓練營Day08】字符串part2

文章目錄

  • 反轉字符串里的單詞
  • 右旋字符串
  • KMP算法
  • 雙指針法總結

反轉字符串里的單詞

題目鏈接:151. 反轉字符串中的單詞

雙指針法解題邏輯

  • head指針遍歷字符串
  • 遍歷到單詞首單詞,生成end指針移動到單詞尾部
  • 遇到完整單詞收集,壓入棧中
  • head指針移動到end指針處
  • 遍歷完之后
  • 通過出棧還原字符串

代碼如下:

class Solution {public String reverseWords(String s) {int head = 0;Deque<String> strs = new ArrayDeque<String>();int count = 0;while(head < s.length()) {if(s.charAt(head) == ' ') {head++;continue;}int end = head;while(end < s.length() && s.charAt(end) != ' ') end++;strs.push(s.substring(head,end));count++;head = end + 1;}StringBuilder result = new StringBuilder();while(!strs.isEmpty()) {if(count-- == 1) result.append(strs.pop());else result.append(strs.pop() + " ");}return result.toString();}
}

右旋字符串

題目鏈接:55. 右旋字符串(第八期模擬筆試)

雙指針法解題邏輯:

  • head指針指向str頭部,end指針指針在尾部
  • end指針逆著走k步
  • 截取前一部分字符串與后一部分字符串拼接即可
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 讀取右旋轉的位數 kint k = scanner.nextInt();scanner.nextLine(); // 消耗掉換行符// 讀取需要旋轉的字符串 sString s = scanner.nextLine();int head = 0;int end = s.length() - k;System.out.println(s.substring(end,s.length()) + s.substring(head,end));}
}

KMP算法

關于kmp算法的理解可以看我的另外一篇文章:KMP算法詳解,能認字就能搞懂

題目鏈接:28. 找出字符串中第一個匹配項的下標

解題邏輯:

  • 首先創建模式串的next數組
  • 創建雙指針一個指向主串,另一個指向模式串
    • 如果不相同,則模式串的指針根據next數組進行回退
    • 如果兩個指針所指字符相同,則雙指針都向前進一位
    • 要注意如果要回退一定是先回退再比較
  • 當模式串的指針指向模式串尾部后一位的時候代表找到了
  • 此時把指向主串的指針對應的下標減去模式串的長度再加1就是模式串首次出現的下標
  • 如果主串遍歷完了都沒有達到要求則表示沒找到,返回-1

代碼如下:

class Solution {public int strStr(String haystack, String needle) {int[] next = new int[needle.length()];builtNums(next,needle);int j = 0;for(int i = 0;i < haystack.length();i++) {while(haystack.charAt(i) != needle.charAt(j) && j > 0) {j = next[j - 1];}if(haystack.charAt(i) == needle.charAt(j)) {j++;if(j == needle.length()) return i - j + 1;}}return -1;}public void builtNums(int[] next,String needle){//創建雙指針int j = 0;next[j] = 0;//創建next數組for (int i = 1;i < next.length;i++) {while(needle.charAt(i) != needle.charAt(j) && j > 0) j = next[j - 1];if (needle.charAt(i) == needle.charAt(j)) j++;next[i] = j;}}
}

雙指針法總結

這種方法在一些線性結構上使用的比較多例如:數組、鏈表、字符串

要明確雙指針法的靈魂就在于:使用雙指針將兩個for循環才能完成的任務使用一個for循環就可以完成!

比較常見的兩種形式:

  • 雙指針一頭一尾,同時向中間逼近(例如我們前面的反轉字符串、n數之和等題)
  • 雙指針都在頭部,職責不同,其中一個為循環變量(例如我們前面的移除數組元素等題)

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

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

相關文章

如何使用backtrace定位Linux程序的崩潰位置

在嵌入式Linux開發中&#xff0c;特別是復雜軟件&#xff0c;多人協作開發時&#xff0c;當某人無意間寫了一個代碼bug導致程序崩潰&#xff0c;但又不知道崩潰的具體位置時&#xff0c;單純靠走讀代碼&#xff0c;很難快速的定位問題。 本篇就來介紹一種方法&#xff0c;使用…

十大排序算法匯總

好的&#xff0c;下面為你整理一篇面試全覆蓋、極其深入的十大排序算法總結博客&#xff0c;涵蓋算法原理、復雜度、穩定性、應用場景、工程實踐、C與Python實現&#xff08;含詳細注釋&#xff09;&#xff0c;并對比分析各種排序的優缺點與適用情境。內容力求結構清晰、講解透…

零基礎 “入坑” Java--- 七、數組(二)

文章目錄 一、數組轉字符串二、數組的拷貝三、求數組中元素的平均值四、查找數組中指定元素&#xff08;順序查找&#xff09;五、數組排序&#xff08;冒泡排序&#xff09;六、查找數組中指定元素&#xff08;二分查找&#xff09;七、判斷兩個數組中的元素是否相等八、填充數…

【C++ 真題】P1104 生日

P1104 生日 題目描述 cjf 君想調查學校 OI 組每個同學的生日&#xff0c;并按照年齡從大到小的順序排序。但 cjf 君最近作業很多&#xff0c;沒有時間&#xff0c;所以請你幫她排序。 輸入格式 輸入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行為 OI 組總人數 n n n&…

Oracle DB和PostgreSQL,OpenGauss主外鍵一致性的區別

針對于unique索引在主外鍵上的表現&#xff0c;o和PG的行為確實不一致&#xff0c;測試樣例&#xff1a;PG:測試1&#xff1a;test# CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL, globalid VARCHAR(38) DEFAULT {00000000-0000-0000-0000-000000000000} …

06.自動化測試概念

自動化測試概念 1. 自動化1.1 回歸測試1.2 自動化分類 1.3 自動化測試金字塔2. web自動化測試3.Selenium 1. 自動化 ? **自動化測試&#xff08;Automated Testing&#xff09;&#xff1a;**是指使用軟件工具或腳本來自動執行測試任務&#xff0c;代替人工進行重復性、繁瑣的…

頁面登錄數據的加密(前端+后端)

本加密過程使用的 AESRSA概要1.使用AES對傳輸數據進行加密AES為對稱加密,加密和解決所需要的key是一樣的,所以攔截到AES key就可以直接解密,所以需要結果RSA進行加密2.對AES的key進行RSA加密RSA為非對稱加密,客戶端只能獲取到publicKey(公鑰),而解密只能使用服務器的privateKey…

PC端基于SpringBoot架構控制無人機(一):初識無人機控制

一、無人機飛控系統的概述飛控&#xff08;Flight Controller&#xff09;是無人機最為核心的組成部分之一&#xff0c;負責實現無人機的自主飛行控制和穩定飛行。飛控系統的功能決定了無人機的飛行性能&#xff0c;包括飛行的穩定性、操控的響應速度、導航的精確度等。通過飛控…

QT6 源(154)模型視圖架構里的列表視圖 QListView:先學習屬性部分,

&#xff08;1&#xff09;屬性總圖&#xff0c;以及測試程序的框架 &#xff1a; 開始屬性的學習 &#xff1a; &#xff08;2&#xff09; 繼續屬性學習 &#xff1a; &#xff08;3&#xff09; 謝謝

MySQL——9、事務管理

事務管理 1、什么是事務&#xff1f;2、事務常見操作方式3、事務隔離級別4、數據庫并發場景4.1、讀-寫4.2、RR與RC的本質區別 1、什么是事務&#xff1f; mysql是基于CS模式的&#xff0c;是一套網絡服務&#xff0c;所以我們是可以在本地連接上遠程服務器的mysql服務端的。my…

Python之面向對象詳解(一篇足矣)

目錄 一、初階面向對象 1. 初識面向對象 1.1 對象和self 1.2 常見成員 1.3 應用示例 將數據封裝到一個對象&#xff0c;便于以后使用。 將數據封裝到對象中&#xff0c;在方法中對原始數據進行加工處理。 根據類創建多個對象&#xff0c;在方法中對對象中的數據進行修改…

【Qt】qml組件對象怎么傳遞給c++

將QML組件對象傳遞給C的方法 在QML和C之間傳遞完整的組件對象需要特殊處理&#xff0c;因為QML組件是動態創建的JavaScript對象。以下是幾種有效的方法&#xff1a; 1. 使用QObject指針傳遞 C端設置 // MyClass.h #include <QObject> #include <QQuickItem>cla…

Java基礎 集合框架 List框架

list架構 list接口list 核心特性以及擴展Collection的體現 抽象類 AbstractList抽象類 AbstractSequentialList (簡化鏈表的順序訪問)AbstractSequentialList 核心特點自定義實現示例代碼講解其實現原理AbstractSequentialList 總結與AbstractList的對比 List 實現類 ArrayList…

2025年6月28和29日復習和預習(C++)

學習筆記大綱?一、預習部分&#xff1a;數組基礎?&#xff08;一&#xff09;核心知識點?數組的創建&#xff1a;掌握一維數組的聲明方式&#xff0c;如int arr[5];&#xff08;創建一個包含 5 個整數的數組&#xff09;。重點在于理解數組長度需為常量&#xff0c;且在聲明…

【centos8服務如何給服務器開發3306端口】

在 CentOS 8 中開放 MySQL 默認端口 3306&#xff0c;需要配置防火墻和 SELinux。以下是詳細步驟&#xff1a; 1. 開放防火墻端口&#xff08;Firewalld&#xff09; CentOS 8 默認使用 firewalld 管理防火墻&#xff0c;執行以下命令開放 3306 端口&#xff1a; # 開放 TCP 33…

python系列之:使用md5和sha256完成簽名認證,調用接口

python系列之:使用md5和sha256完成簽名認證,調用接口 MD5簽名和sha256簽名認證md5認證代碼sha256認證代碼拼接簽名生成簽名拼接url調用接口MD5簽名和sha256簽名認證 MD5簽名認證 算法特性: 生成128位(16字節)的哈希值計算速度快已被證明存在碰撞漏洞(不同輸入可能產生相同…

SpringBatch配置與入門實例

通過對SpringBatch基礎概念的了解&#xff0c;參考&#xff1a;SpringBatch使用介紹 任何技術用起來之后&#xff0c;再去探究內部細節的原理&#xff0c;才會事半功倍。下面記錄一下筆者在SpringBoot項目中集成SpringBatch&#xff0c;并且通過一個小的實例展示如何簡單使用它…

spdlog 項目介紹與二次封裝

目錄 介紹 二次封裝 介紹 spdlog 是C開源的第三方日志庫&#xff0c;整個項目在 spdlog 命名空間中。 在 spdlog 命名空間的 level 命名空間里定義了枚舉類型&#xff0c;把日志分為了 5 個等級&#xff1a;trace debug info warn err critical enum level_enum : in…

shell編程之awk命令詳解

1. awk 教程 1.1 調用 awk awk 是一種強大的文本處理工具&#xff0c;在 Linux 系統中廣泛應用于日志分析、數據處理等場景。調用 awk 主要有以下三種方式&#xff1a; 1.1.1 命令行方式 基本語法為&#xff1a; awk (-F filed-separator) commands input-files其中&#…

服務器需要備案嗎?在哪些地區需要備案?

&#x1f3af; 服務器是否需要備案&#xff1f; 是否需要備案&#xff0c;關鍵看以下兩個因素&#xff1a; 服務器所在地&#xff08;機房位置&#xff09; 網站面向的訪問群體&#xff08;境內或境外&#xff09; &#x1f3f7; 中國大陸&#xff08;境內&#xff09;服務器…