代碼隨想錄算法訓練營第六天 -- 字符串1 || 344.反轉字符串I / 541.反轉字符串II / kamacoder54.替換數字--第八期模擬筆試

代碼隨想錄算法訓練營第六天 -- 字符串1 || 344.反轉字符串I / 541.反轉字符串II / kamacoder54.替換數字--第八期模擬筆試

  • 344.反轉字符串I
    • 思路
  • 541.反轉字符串II
    • 題目理解
    • 解題思路
      • 邊界細節
      • reverse()函數的實現
  • [kamacoder54.替換數字 -- 第八期模擬筆試](https://kamacoder.com/problempage.php?pid=1064)
    • 解題思路

344.反轉字符串I

文檔講解:代碼隨想錄算法訓練營
視頻講解:算法視頻公開課
狀態:做出來了,用了一個臨時字符,反復交換就行了

思路

本道題是實現reverse()函數,所以不要直接使用reverse()函數。
本道題是要使用雙指針,使用相向雙指針的方法。

class Solution {
public:void reverseString(vector<char>& s) {int n = s.size();for (int i = 0, j = n - 1; i < n / 2; i++, j--) {swap(s[i], s[j]);}}
};

這里swap()交換函數的實現如下:

        	// swap()函數實現方法一tmp = s[i];s[i] = s[j];s[j] = tmp;
        	// swap()函數實現方法二s[i] ^= s[j];s[j] ^= s[i];s[i] ^= s[j];

541.反轉字符串II

文檔講解:代碼隨想錄算法訓練營
視頻講解:算法視頻公開課
狀態:沒做出來,沒讀懂題,繞蒙了。

題目理解

這道題讀題有點難理解。
這道題是在講,一個字符串s,每2k個為一組。
每組中前k個元素反轉,后k個不變。
如果剩下的字符數目不足2k個,那么還有兩種情況:
(1)如果不足k個,那么這些元素反轉
(2)如果k < 剩下字符數目 < 2k,那么前k個反轉,剩下的不變。

解題思路

這道題我們for循環里,i += 2k進行循環,每次循環中,只反轉[i, i + k)區間的字符,反轉完結束本次循環。如果剩余字符不足k個,那么反轉[i, n)區間的字符。
代碼:

class Solution {
public:string reverseStr(string s, int k) {int n = s.size();// 進入循環,每 2k 個字符為一組for (int i = 0; i < n; i += 2 * k) {// 如果這組字符數 > k 個,那么前 k 個字符反抓if (i + k <= n) {reverse(s.begin() + i, s.begin() + i + k);continue;}// 如果不足 k 個元素,反轉剩余元素reverse(s.begin() + i, s.begin() + n);}return s;}
};

邊界細節

這里有幾個邊界問題的細節
1)if()的判斷條件:i + k <= n。假設n = 3,k = 3,i = 0,第一次是符合的,如果沒有等于,那么就不符合,明顯不對。
2)reverse()傳入的參數:這里是左閉右開區間,第 k 個元素的下表是 i + k - 1,那么反轉的區間是[i, i + k - 1]

reverse()函數的實現

class Solution {
public:void reverse(string& s, int start, int end) {for (int i = start, j = end - 1; i < j; i++, j--) {swap(s[i], s[j]);}}string reverseStr(string s, int k) {int n = s.size();for (int i = 0; i < n; i += 2 * k) {if (i + k <= n) {reverse (s, i, i + k);continue;}reverse (s, i, n);}return s;}
};

kamacoder54.替換數字 – 第八期模擬筆試

文檔講解:代碼隨想錄算法訓練營
狀態:看題解懂了

解題思路

第一步
首先我們要給原來字符串擴容,這里用到的是resize()函數。遇到數字,就給原來字符串擴容5個空間
在這里插入圖片描述

    int count = 0;for (int i = 0; i < s.size(); i ++) {if (s[i] >= '0' && s[i] <= '9') {count ++;}}

第二步
我們設原來字符串的最后字符索引為n1 = s.size() - 1,擴容后新字符串的最后一個字符的索引為n2 = s.size() - 1

    int n1 = s.size() - 1;s.resize(s.size() + 5 * count);int n2 = s.size() - 1;

第三步
我們遍歷原字符串,如果原字符串某個字符是字母,那么就在新字符串中最后一個位置填上原來字符串的字母;
如果原來字符串某個字符是數字,那么就在新字符串從后到前依此填上r, e, b, m ,u ,n
在這里插入圖片描述

    while (n1 >= 0) {if (s[n1] >= '0' && s[n1] <= '9') {s[n2 --] = 'r';s[n2 --] = 'e';s[n2 --] = 'b';s[n2 --] = 'm';s[n2 --] = 'u';s[n2 --] = 'n';} else {s[n2 --] = s[n1];}n1 --;}

完整代碼如下:

#include <iostream>
using namespace std;int main() {string s;cin >> s;int count = 0;for (int i = 0; i < s.size(); i ++) {if (s[i] >= '0' && s[i] <= '9') {count ++;}}int index1 = s.size() - 1;s.resize(s.size() + 5 * count);int index2 = s.size() - 1;while (index1 >= 0) {if (s[index1] >= '0' && s[index1] <= '9') {s[index2 --] = 'r';s[index2 --] = 'e';s[index2 --] = 'b';s[index2 --] = 'm';s[index2 --] = 'u';s[index2 --] = 'n';} else {s[index2 --] = s[index1];}index1 --;}cout << s << endl;
}

注意
(1)while()循環的條件是index1 >= 0,而不是index1 --,因為最后已經減了,index1的范圍可以到0,它指的是索引下標。
(2)注意index1index2的含義,不要弄混。

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

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

相關文章

計算機視覺——光流法

系列文章目錄 本系列開篇文章&#xff0c;暫時沒有目錄啦&#xff5e; 文章目錄系列文章目錄前言一、問題假設二、方程推導三、計算Ix,Iy,ItI_x,I_y,I_tIx?,Iy?,It?四、計算光流u,vu,vu,v4.1 傳統算法Lucas-Kanade算法五、孔徑問題5.1 直觀理解5.2 數學角度5.3 解決方法總結…

前端安全攻防:XSS, CSRF 等防范與檢測

前端安全攻防&#xff1a;XSS, CSRF 等防范與檢測在Web應用日益普及的今天&#xff0c;前端安全已經成為一個不容忽視的重要環節。隨著攻擊技術的不斷演進&#xff0c;各種前端安全漏洞&#xff08;如跨站腳本攻擊 XSS、跨站請求偽造 CSRF 等&#xff09;層出不窮&#xff0c;它…

03OpenCV圖像處理

參考課程&#xff1a; 【黑馬程序員 OpenCV入門教程】 [https://www.bilibili.com/video/BV1Fo4y1d7JL] ZZHow(ZZHow1024) 1.1幾何變換 圖像縮放 對圖像的大小進行調整&#xff0c;即使圖像放大或縮小 cv2.resize(src, dsize, fx0, fy0, interpolationcv2.INTER_LINEAR)參數…

UE5 C++ 第三方動態庫的使用

一. 首先要拷貝對應的 第三方庫 bin里有dll動態庫&#xff0c;include里有動態庫需要的頭文件。 二.在Target.cs里&#xff0c;進行設置 頭文件前面的路徑為公共路徑 設置需要一起打包的三方庫文件 三.加載這個庫 FPlatformProcess::GetDllHandle將他解析為 任意類型&#x…

C++進階——多態

? ? ? ? ? づ?ど &#x1f389; 歡迎點贊支持&#x1f389; 個人主頁&#xff1a;勵志不掉頭發的內向程序員&#xff1b; 專欄主頁&#xff1a;C語言&#xff1b; 文章目錄 前言 一、多態的概念 二、多態的定義及實現 2.1、多態的構成條件 &#xff08;1&#xff09;虛函…

Swift 語法學習指南 - 與 Kotlin 對比

Swift 語法學習指南 - 與 Kotlin 對比 本指南專為有 Android/Kotlin 開發經驗的開發者設計&#xff0c;通過對比學習快速掌握 Swift 語法 目錄 語言基礎對比變量與常量數據類型函數定義類與結構體繼承與協議可選類型集合類型控制流閉包與Lambda擴展與Extension錯誤處理內存管理…

嵌入式C語言筆記十七——構造數據類型

一.結構體&#xff1a;1.類型定義&#xff1a;struct 結構體名 {數據類型1 成員變量1;數據類型2 成員變量2;數據類型3 成員變量3;... };struct student {char name[32];char sex;int age;int score; };2.結構體變量定義&#xff1a;存儲類型 數據類型 變量名;3.結構體元素初始化…

深入實踐G1垃圾收集器調優:Java應用性能優化實戰指南

深入實踐G1垃圾收集器調優&#xff1a;Java應用性能優化實戰指南 一、技術背景與應用場景 隨著微服務和海量并發請求的普及&#xff0c;Java應用在生產環境中對低延遲和高吞吐的需求日益顯著。傳統的CMS和Parallel GC 在大內存場景下常出現Full GC 停頓時間長、吞吐下降等問題…

【JobScheduler】Android 后臺任務調度的核心組件指南

JobScheduler 是 Android 平臺上原生支持在直接啟動模式&#xff08;Direct Boot Mode&#xff09;下執行任務的調度器。 相比 WorkManager 需要復雜的配置才能勉強支持直接啟動&#xff0c;JobScheduler 在這方面有著天生的優勢和明確的 API 支持。如果你面臨的硬性要求是必須…

c# 調用basler 相機

目錄 一聯合halcon&#xff1a; 二 c# 原生 一聯合halcon&#xff1a; 環境配置 下載安裝pylon軟件 下載安裝halcon 創建 winform項目 test_basler 添加引用 打開pylon可以連接相機 可以看到我的相機id為23970642 &#xff08; c#聯合halcon的基礎教程&#xff08;案例…

《2025年AI產業發展十大趨勢報告》四十六

《2025年AI產業發展十大趨勢報告》四十六隨著科技的迅猛發展&#xff0c;人工智能&#xff08;AI&#xff09;作為引領新一輪科技革命和產業變革的戰略性技術&#xff0c;正逐步滲透到各個行業和領域&#xff0c;成為推動經濟社會發展的重要引擎。2023年&#xff0c;生成式AI的…

c++ 雜記

1. 為什么返回*this?2. 3. 友元函數的使用&#xff1a;需要頭文件中類內外聲明&#xff0c;cpp文件中實現定義哦// Sales_data.h #ifndef SALES_DATA_H #define SALES_DATA_H#include <string>class Sales_data {std::string bookNo;int units_sold 0;double revenue …

PDF文件基礎-計算機字體

計算機字體的原理包含了字符編碼、字形渲染和字體文件存儲三個關鍵技術。 字符編碼負責將每個字符映射到一個唯一的數字碼&#xff1b;字形渲染則將這些數字碼轉換成屏幕或紙張上可識別的圖形&#xff1b;字體文件存儲則包含了字符的編碼、圖形描述信息以及字體的其他屬性&…

華為IP(9)

OSPF的基本配置OSPF路由計算前言&#xff1a;1)同一區域內的OSPF路由器擁有完全一致的LSDB&#xff0c;在區域內部&#xff0c;OSPF采用SPF算法完成路由計算。2&#xff09;隨著網絡規模不斷擴大&#xff0c;路由器為了完成路由計算所消耗的內存、CPU資源也越來越多。通過區域劃…

java.nio.file.InvalidPathException異常

一.問題概述 本人在ubuntu22.04的操作系統上&#xff0c;運行java程序時創建一個文件時&#xff0c;由于文件名稱中包含了中文&#xff0c;所以導致了程序拋出了java.nio.file.InvalidPathException的異常。 java.nio.file.InvalidPathException: Malformed input or input co…

Next系統總結學習(一)

下面我按題號逐條 詳細 解釋并給出示例與最佳實踐。為便于閱讀&#xff0c;我會同時給出關鍵代碼片段&#xff08;偽代碼/實用例子&#xff09;&#xff0c;并指出常見坑與解決方案。 1. 你是如何理解服務端渲染&#xff08;SSR&#xff09;的&#xff1f;它的核心工作流程是怎…

房屋安全鑒定需要什么條件

房屋安全鑒定需要什么條件&#xff1a;專業流程與必備要素解析房屋安全鑒定是保障建筑使用安全的重要環節&#xff0c;它通過對建筑結構、材料性能及使用狀況的全面評估&#xff0c;為房屋的安全使用、改造或維護提供科學依據。隨著城市建筑老化及自然災害頻發&#xff0c;房屋…

現代C++:現代C++?

C語言正在走向完美&#xff0c;所以&#xff0c;C語言值得學習&#xff08;甚至研究&#xff09;&#xff0c;這些知識可以成為一切編程的基礎。然而在實踐中&#xff0c;不必全面的使用C語言的各種特性&#xff0c;而應根據工程項目的實際情況&#xff0c;適當取舍&#xff08…

【C++】哈希表實現

1. 哈希概念 哈希(hash)又稱散列&#xff0c;是?種組織數據的方式。從譯名來看&#xff0c;有散亂排列的意思。本質就是通過哈希 函數把關鍵字Key跟存儲位置建立一個映射關系&#xff0c;查找時通過這個哈希函數計算出Key存儲的位置&#xff0c;進行快速查找 1.1 直接定址法…

ai 玩游戲 llm玩街霸 大模型玩街霸 (3)

1. 開源代碼地址&#xff1a; https://github.com/OpenGenerativeAI/llm-colosseum 2. 架構&#xff1a; 3. 圖片&#xff1a; 4. 感覺還是下面的步驟&#xff1a; a. 實時理解游戲當前環境&#xff0c;英雄角色&#xff0c;英雄狀態 b. 根據當前狀態感知&#xff0c;生成英雄…