国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串

這篇具有很好參考價(jià)值的文章主要介紹了【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

歡迎來(lái)到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)?lái)字符串~反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串的分享?


344. 反轉(zhuǎn)字符串

?題目鏈接點(diǎn)這里
編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過(guò)來(lái)。輸入字符串以字符數(shù)組 s 的形式給出。不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問(wèn)題。

示例 1:
輸入:s = [“h”,“e”,“l(fā)”,“l(fā)”,“o”]
輸出:[“o”,“l(fā)”,“l(fā)”,“e”,“h”]

示例 2:
輸入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
輸出:[“h”,“a”,“n”,“n”,“a”,“H”]

提示:
1 <= s.length <= 105
s[i] 都是 ASCII 碼表中的可打印字符

就是實(shí)現(xiàn)庫(kù)函數(shù)reverse

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

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展


541. 反轉(zhuǎn)字符串 II

?題目鏈接點(diǎn)這里
給定一個(gè)字符串 s 和一個(gè)整數(shù) k,從字符串開頭算起,每計(jì)數(shù)至 2k 個(gè)字符,就反轉(zhuǎn)這 2k 字符中的前 k 個(gè)字符。如果剩余字符少于 k 個(gè),則將剩余字符全部反轉(zhuǎn)。
如果剩余字符小于 2k 但大于或等于 k 個(gè),則反轉(zhuǎn)前 k 個(gè)字符,其余字符保持原樣。

示例 1:
輸入:s = “abcdefg”, k = 2
輸出:“bacdfeg”

示例 2:
輸入:s = “abcd”, k = 2
輸出:“bacd”

提示:
1 <= s.length <= 104
s 僅由小寫英文組成
1 <= k <= 104

分情況討論一下就可以了~

class Solution {
public:
    string reverseStr(string s, int k) {
        for (int i = 0; i < s.size(); i += (2 * k)) {
            if (i + k <= s.size())
                reverse(s.begin() + i, s.begin() + i + k);
            else 
                reverse(s.begin() + i, s.end());
        }
        return s;
    }
};

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展

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

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展

class Solution {
public:
    string reverseStr(string s, int k) {
        int pos = 0, n = s.size();
        while (pos < n) {
            if (pos + k < n) 
                reverse(s.begin() + pos, s.begin() + pos + k);
            else reverse(s.begin() + pos, s.end());
            pos += 2 * k;
        }
        return s;
    }
};

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展


劍指 Offer 05. 替換空格

?題目鏈接點(diǎn)這里
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成"%20"。

示例 1:
輸入:s = “We are happy.”
輸出:“We%20are%20happy.”

限制:
0 <= s 的長(zhǎng)度 <= 10000

思路:

擴(kuò)容+雙指針
為什么要從后往前遍歷?

  1. 不用申請(qǐng)新數(shù)組。
  2. 從后向前填充元素,避免了從前向后填充元素時(shí),每次添加元素都要將添加元素之后的所有元素向后移動(dòng)的問(wèn)題。
class Solution {
public:
    string replaceSpace(string s) {
        int count = 0;
        int sOldSize = s.size();
        for (int i = 0; i < sOldSize; i++) {
            if (s[i] == ' ') {
                count++;
            }
        }
        s.resize(sOldSize + 2 * count);
        int sNewSize = s.size();
        for (int i = sOldSize - 1, j = sNewSize - 1; i >= 0; i--, j-- ) {
            if (s[i] != ' ') {
                s[j] = s[i];
            }
            else {
                s[j] = '0';
                s[j-1] = '2';
                s[j-2] = '%';
                j -= 2;
            }
        }
    return s;
    }
};

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展


151. 反轉(zhuǎn)字符串中的單詞

?題目鏈接點(diǎn)這里
給你一個(gè)字符串 s ,請(qǐng)你反轉(zhuǎn)字符串中 單詞 的順序。單詞 是由非空格字符組成的字符串。s 中使用至少一個(gè)空格將字符串中的 單詞 分隔開。返回 單詞 順序顛倒且 單詞 之間用單個(gè)空格連接的結(jié)果字符串。注意:輸入字符串 s中可能會(huì)存在前導(dǎo)空格、尾隨空格或者單詞間的多個(gè)空格。返回的結(jié)果字符串中,單詞間應(yīng)當(dāng)僅用單個(gè)空格分隔,且不包含任何額外的空格。

示例 1:
輸入:s = “the sky is blue”
輸出:“blue is sky the”

示例 2:
輸入:s = " hello world "
輸出:“world hello”
解釋:反轉(zhuǎn)后的字符串中不能存在前導(dǎo)空格和尾隨空格。

示例 3:
輸入:s = “a good example”
輸出:“example good a”
解釋:如果兩個(gè)單詞間有多余的空格,反轉(zhuǎn)后的字符串需要將單詞間的空格減少到僅有一個(gè)。

提示:
1 <= s.length <= 104
s 包含英文大小寫字母、數(shù)字和空格 ’ ’
s 中 至少存在一個(gè) 單詞

思路:

  1. 移除多余空格
  2. 將整個(gè)字符串反轉(zhuǎn)
  3. 將每個(gè)單詞反轉(zhuǎn)
    移除多于空格大家可以參照移除元素,思路是一模一樣的,最后的單詞翻轉(zhuǎn)if (i == s.size() || s[i] == ' ')是到達(dá)單詞末尾或者遇到空格,翻轉(zhuǎn)
lass Solution {
public:
    void reverse(string& s, int start, int end) {
        for (int i = start, j = end; i < j; i++, j-- ) {
            swap(s[i], s[j]);
        }
    }
    void removeExtraSpace(string& s) {
        int slow = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] != ' ') {
                if (slow != 0) {
                    s[slow++] = ' ';
                }
                while (i < s.size() && s[i] != ' ') {
                    s[slow++] = s[i++];
                }
            }
        }
        s.resize(slow);
    }
    string reverseWords(string s) {
        removeExtraSpace(s);
        reverse(s, 0, s.size() - 1);
        int start = 0;
        for (int i = 0;i <= s.size(); i++) {
            if (i == s.size() || s[i] == ' ') {
                reverse(s, start, i - 1);
                start = i + 1;
            }
        }
        return s;
    }
};

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展


劍指 Offer 58 - II. 左旋轉(zhuǎn)字符串

?題目鏈接點(diǎn)這里
字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個(gè)字符轉(zhuǎn)移到字符串的尾部。請(qǐng)定義一個(gè)函數(shù)實(shí)現(xiàn)字符串左旋轉(zhuǎn)操作的功能。比如,輸入字符串"abcdefg"和數(shù)字2,該函數(shù)將返回左旋轉(zhuǎn)兩位得到的結(jié)果"cdefgab"。

示例 1:
輸入: s = “abcdefg”, k = 2
輸出: “cdefgab”

示例 2:
輸入: s = “l(fā)rloseumgh”, k = 6
輸出: “umghlrlose”

限制:
1 <= k < s.length <= 10000

思路:

  1. 反轉(zhuǎn)區(qū)間為前n的子串
  2. 反轉(zhuǎn)區(qū)間為n到末尾的子串
  3. 反轉(zhuǎn)整個(gè)字符串
    【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展
class Solution {
public:
    string reverseLeftWords(string s, int n) {
        reverse(s.begin(), s.begin() + n);
        reverse(s.begin() + n, s.end());
        reverse(s.begin(), s.end());
        return s;
    }
};

【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串,# Leetcode | 代碼隨想錄 | 專題化,leetcode,算法,職場(chǎng)和發(fā)展

總結(jié)

字符串第一感覺(jué)很樸實(shí),但是要提高執(zhí)行效率,還是可以玩的很花的,比如反轉(zhuǎn)~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-609397.html

到了這里,關(guān)于【代碼隨想錄 | Leetcode | 第十一天】字符串 | 反轉(zhuǎn)字符串 | 反轉(zhuǎn)字符串 II | 替換空格 | 反轉(zhuǎn)字符串中的單詞 | 左旋轉(zhuǎn)字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【代碼隨想錄算法第一天| 704.二分查找 27.移除元素】

    題目鏈接:二分查找 文章講解:代碼隨想錄.二分查找 視頻講解:手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_嗶哩嗶哩_bilibili 二分前提:有序數(shù)組,數(shù)組中無(wú)重復(fù)元素 方法:結(jié)合數(shù)組的特征,可以為左閉右閉區(qū)間[0, 數(shù)組長(zhǎng)度-1],或者左

    2024年02月16日
    瀏覽(21)
  • 代碼隨想錄圖論 第一天 | 797.所有可能的路徑 200. 島嶼數(shù)量

    代碼隨想錄圖論 第一天 | 797.所有可能的路徑 200. 島嶼數(shù)量 一、797.所有可能的路徑 題目鏈接:https://leetcode.cn/problems/all-paths-from-source-to-target/ 思路:求從0到n-1的所有路徑,終止條件是當(dāng)前節(jié)點(diǎn)為n-1。本題圖的結(jié)構(gòu)是group[][],group[x]表示x節(jié)點(diǎn)所能到達(dá)的所有節(jié)點(diǎn)的集合,深度

    2024年02月08日
    瀏覽(32)
  • 【一天三道算法題】代碼隨想錄——Day15(困難題只有一道)

    一. 滑動(dòng)窗口最大值 題目鏈接:力扣 思路: ????????這道題我認(rèn)為最難的是編程語(yǔ)言本身并沒(méi)有一個(gè)可以讓你完全直接開始使用的一個(gè)數(shù)據(jù)結(jié)構(gòu),也就是說(shuō)要自己造輪子。并且為了盡可能的減少維護(hù)元素的個(gè)數(shù)我們要學(xué)會(huì)去在能實(shí)現(xiàn)功能的前提下,維護(hù)盡可能少的數(shù)組元

    2024年02月15日
    瀏覽(93)
  • 代碼隨想錄Leetcode70. 爬樓梯

    代碼隨想錄Leetcode70. 爬樓梯

    ? ? ? ? 空間復(fù)雜度為O(N),如果想要優(yōu)化空間復(fù)雜度,則只用三個(gè)變量進(jìn)行狀態(tài)轉(zhuǎn)移也可以,參考 代碼隨想錄 Leetcode509. 斐波那契數(shù)-CSDN博客

    2024年02月19日
    瀏覽(97)
  • 代碼隨想錄Leetcode 343. 整數(shù)拆分

    代碼隨想錄Leetcode 343. 整數(shù)拆分

    ? ? ? ? dp[i]表示i所能拆分的最大乘積,則dp[i] 與dp[i - 1]的遞推公式是: ? ? ? ? ? ? ? ? max( 1~n * dp[n ~ 1])

    2024年02月21日
    瀏覽(100)
  • 代碼隨想錄 LeetCode數(shù)組篇 二分查找

    代碼隨想錄 LeetCode數(shù)組篇 二分查找

    # (簡(jiǎn)單)704. 二分查找 題目鏈接 代碼隨想錄 - 二分查找思路 二分查找,思路很簡(jiǎn)單,但是在while循環(huán)left和right的比較是寫=還是,還有right=mid還是right=mid-1容易混淆 需要想清楚對(duì)區(qū)間的定義,是[left,right],還是[left,right) (版本一,左閉右閉版本) (版本二,左閉右開) 題目

    2024年02月02日
    瀏覽(93)
  • 代碼隨想錄 Leetcode763. 劃分字母區(qū)間
  • 代碼隨想錄 Leetcode18. 四數(shù)之和

    代碼隨想錄 Leetcode18. 四數(shù)之和

    ? ? ? ? 不行了,今天做了太多n數(shù)之和要吐了,太惡心了,一堆剪枝,去重太惡心人了。最后還是照著卡哥的改

    2024年01月17日
    瀏覽(97)
  • 【代碼隨想錄-Leetcode第二題:27.移除元素】

    給你一個(gè)數(shù)組 nums 和一個(gè)值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。 元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的 樣例:示例 1: 解釋:函數(shù)

    2024年02月14日
    瀏覽(20)
  • 【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59

    【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59

    歡迎來(lái)到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)?lái)螺旋矩陣的分享 ? 給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1 到 n 2 所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 示例 2: 提示: 思路: 本類型題目其實(shí)都不涉及什么算法,就是模擬

    2024年02月16日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包