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

力扣 [344、541、劍指offer 05.、151、劍指offer58-ll]

這篇具有很好參考價(jià)值的文章主要介紹了力扣 [344、541、劍指offer 05.、151、劍指offer58-ll]。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

原題鏈接

解題思路:

雙指針:自己的

  1. 雙指針,左指針指向開頭,右指針指向末尾。
  2. 交換兩個(gè)左右指針。
  3. 左右指針向中間移動(dòng)。

時(shí)間復(fù)雜度:O(n);
空間復(fù)雜度:O(1);

實(shí)現(xiàn)代碼:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int n = s.size();
        int l = 0, r = n - 1;
        while (l < r) {
            swap(s[l ++], s[r --]);
        }
        return ;
    }
};

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

原題鏈接

解題思路:

分類討論:自己的

分類討論:

  1. 如果剩余字符少于k個(gè),則將剩余字符全部反轉(zhuǎn)。
  2. 如果剩余字符大于或等于k個(gè),則反轉(zhuǎn)前k個(gè)字符,其余字符保持原樣??梢悦看翁幚?k個(gè)字符,判斷并調(diào)用庫函數(shù)reverse進(jìn)行反轉(zhuǎn)操作。

時(shí)間復(fù)雜度:O(n/2) = O(n);
空間復(fù)雜度:O(1);
力扣 [344、541、劍指offer 05.、151、劍指offer58-ll],力扣 3000 題,leetcode,算法,職場(chǎng)和發(fā)展

實(shí)現(xiàn)代碼:

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.size();

        for (int i=0; i < n; i += 2*k) {
            //2k < n 的情況:
            if (2*k <= n - i) {
                reverse (s.begin() + i, s.begin() + i + k);
            }
            // k <= n < 2k
            else if (n-i >= k) {
                reverse(s.begin() + i, s.begin() + i + k);
            }
            // n < k;
            else {
                reverse (s.begin() + i, s.end());
            }
        }

        return s;
    }
};

優(yōu)化:

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.size();

        for (int i=0; i < n; i += 2*k) {
            if (k <= n - i) {
                reverse (s.begin() + i, s.begin() + i + k);
            }
            else {
                reverse (s.begin() + i, s.end());
            }
        }
        return s;
    }
};

劍指Offer 05.替換空格

原題鏈接

解題思路:

原數(shù)組上替換空格:自己的

  1. 擴(kuò)充字符串的長(zhǎng)度,由于一個(gè)空格 = “%20”,即相當(dāng)于三個(gè)字符,等價(jià)于多了兩個(gè)字符。
  2. 通過resize()函數(shù),重新設(shè)置大小。即統(tǒng)計(jì)空格的數(shù)量,新字符串的大小 = 原字符串長(zhǎng)度的大小 + 空格數(shù)量 * 2;
  3. 所以第一步是統(tǒng)計(jì)空格的數(shù)量。
  4. 第二步擴(kuò)容。
  5. 第三步:從后往前遍歷字符串,將一個(gè)指針指向新字符串的末尾。另一個(gè)指針指向舊字符串的末尾,然后若當(dāng)前舊字符串的指針指向的是字母,則將其丟給新的字符串。如果是空格的話,則先處理新字符串的指針,從后往前填充三個(gè)字符:“%20”;然后再使得新舊字符串的指針同時(shí)向前移動(dòng)!

實(shí)現(xiàn)代碼:

class Solution {
public:
    string replaceSpace(string s) {
        int cnt=0;
        int old = s.size();
        for (int i=0; i <  old; i ++) {
            if (s[i] == ' ') {
                cnt ++;
            }
        }

        s.resize(old + cnt * 2);

        int n = s.size();
        for (int l = old-1, r=n-1; l < r; l --, r --) {
            if (s[l] != ' ') {
                s[r] = s[l];
            }
            else {
                s[r--] = '0';
                s[r--] = '2';
                s[r] = '%';
            }
        }
        return s;
    }
};

151.翻轉(zhuǎn)字符串里的單詞

原題鏈接

解題思路:

雙指針:別人的

本題要求返回單詞順序顛倒且單詞之間用單個(gè)空格連接的結(jié)果字符串。僅反轉(zhuǎn)字符串中單詞的順序,單詞本身并沒有反轉(zhuǎn)。也就是說,最后一個(gè)單詞反轉(zhuǎn)到第一個(gè)位置,單詞本身沒有變??梢韵确崔D(zhuǎn)整個(gè)字符串,然后再反轉(zhuǎn)每個(gè)單詞,在反轉(zhuǎn)過程中,去掉多余空格。

如何反轉(zhuǎn)單詞 :
用start變量掃描字符串,遇到第一個(gè)非空格字符時(shí),end=start;讀取字符s[end],放入s[i],然后end++,i++,i用來控制反轉(zhuǎn)后的字符串下標(biāo),當(dāng)s[end]為空格時(shí),就找到了一個(gè)單詞。使用reverse函數(shù)反轉(zhuǎn)該單詞更新start為end,反轉(zhuǎn)下一個(gè)單詞。

實(shí)現(xiàn)代碼:

class Solution {
public:
    string reverseWords(string s) {
        int n = s.size();
        reverse(s.begin(), s.end());
        int i=0;
        for (int start = 0; start < n; start ++) {
            //先找到第一個(gè)不為空格的字符,等于跳過行首空格!
            if (s[start] != ' ') {
                //單詞之間加個(gè)空格:
                if (i != 0) {   //i!=0,是為了排除行首添加空格!
                    s[i ++] = ' ';
                }
                int end = start;
                //不停尋找當(dāng)前單詞的末尾,直到找到空格為止,則當(dāng)前單詞一定是在[start, end);
                while (end < n && s[end] != ' ') {
                    s[i ++] = s[end ++];
                }
                //翻轉(zhuǎn)單詞,由于i指向的是末尾,所以通過計(jì)算當(dāng)前單詞的長(zhǎng)度,然后求得左右端點(diǎn)
                //然后反轉(zhuǎn)區(qū)間內(nèi)的單詞。
                reverse (s.begin() + i - (end - start), s.begin() + i);
                // 處理下一個(gè)單詞
                start = end;
            }
        }
        s.erase (s.begin() + i, s.end());
        return s;
    }
};

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

原題鏈接

解題思路:

局部反轉(zhuǎn) ->整體反轉(zhuǎn):

題意:將字符串的前n個(gè)字符移動(dòng)到末尾。
而我們的reverse函數(shù)翻轉(zhuǎn)的話,會(huì)改變單詞之間的順序。
但很重要的一點(diǎn)是:一個(gè)字符串,進(jìn)行兩次reverse翻轉(zhuǎn)的話,等價(jià)于沒有變動(dòng)!

所以我們可以先將前 n 個(gè)字符串進(jìn)行翻轉(zhuǎn),然后再將 第 n 個(gè) 之后的字符串進(jìn)行翻轉(zhuǎn)。(兩次局部的翻轉(zhuǎn))

然后再整體翻轉(zhuǎn):則得到理想的效果!

若先整體翻轉(zhuǎn)的話,的確,我們想要的字符串部分,是移動(dòng)到了末尾,但是字符串內(nèi)部的字符順序是顛倒的,也可以這時(shí)候來索引n,劃分區(qū)間,然后進(jìn)行兩次局部翻轉(zhuǎn)。不過這時(shí)候的話:區(qū)間為:[… ,倒數(shù)第n個(gè)],[倒數(shù)第n個(gè),之后];

不過倒數(shù)的n,不如正數(shù)的n;

總之:兩次局部翻轉(zhuǎn) + 一次整體翻轉(zhuǎn)!

實(shí)現(xiàn)代碼:

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;
    }
};

總結(jié):

雙指針還可以用來翻轉(zhuǎn)字符串、索引區(qū)間、原數(shù)組上更新、文章來源地址http://www.zghlxwxcb.cn/news/detail-616537.html

到了這里,關(guān)于力扣 [344、541、劍指offer 05.、151、劍指offer58-ll]的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • (字符串 ) 劍指 Offer 58 - II. 左旋轉(zhuǎn)字符串 ——【Leetcode每日一題】

    (字符串 ) 劍指 Offer 58 - II. 左旋轉(zhuǎn)字符串 ——【Leetcode每日一題】

    難度:簡(jiǎ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:

    2024年02月08日
    瀏覽(24)
  • LeetCode:劍指Offer 05. 替換空格 (字符串)

    LeetCode:劍指Offer 05. 替換空格 (字符串)

    ??道阻且長(zhǎng),行則將至。?? ??算法,不如說它是一種思考方式?? 算法專欄: ????123 上一題:344. 反轉(zhuǎn)字符串 本文速覽: ??劍指 Offer 05 . 替換空格 - 簡(jiǎn)單 ??151. 反轉(zhuǎn)字符串中的單詞-中等 題目描述 :請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成\\\"%20\\\"。 來源:力扣(

    2023年04月11日
    瀏覽(23)
  • (字符串 ) 劍指 Offer 05. 替換空格 ——【Leetcode每日一題】

    (字符串 ) 劍指 Offer 05. 替換空格 ——【Leetcode每日一題】

    難度:簡(jiǎ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ò)充數(shù)組到每個(gè)空格替換

    2024年02月08日
    瀏覽(30)
  • leetcode(力扣) 劍指 Offer 12. 矩陣中的路徑(回溯 DFS)

    leetcode(力扣) 劍指 Offer 12. 矩陣中的路徑(回溯 DFS)

    給定一個(gè) m x n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許被重復(fù)使用。

    2024年02月14日
    瀏覽(20)
  • 劍指 Offer 58 - I. 翻轉(zhuǎn)單詞順序

    劍指 Offer 58 - I. 翻轉(zhuǎn)單詞順序 不用內(nèi)置方法 去除首尾空格和中間多余空格 翻轉(zhuǎn)所有字符 翻轉(zhuǎn)每個(gè)單詞 用自帶的 trim() 和 substring() ,要自己實(shí)現(xiàn)這兩個(gè)方法也很簡(jiǎn)單。

    2024年02月11日
    瀏覽(21)
  • 劍指 Offer 05. 替換空格

    力扣 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成\\\"%20\\\"。 示例 1: 輸入:s = \\\"We are happy.\\\" 輸出:\\\"We%20are%20happy.\\\" 限制: 0 = s 的長(zhǎng)度 = 10000 ?題解: 算法流程: ??? 初始化一個(gè)字符串,記為 res ; ??? 遍歷字符串 s 中的每個(gè)字符 s[i]: ??????? 當(dāng) s[i] 為空格時(shí):向 re

    2024年02月15日
    瀏覽(19)
  • 劍指Offer題集(力扣)

    劍指Offer題集(力扣)

    難度簡(jiǎn)單1155 找出數(shù)組中重復(fù)的數(shù)字。 在一個(gè)長(zhǎng)度為 n 的數(shù)組 nums 里的所有數(shù)字都在 0~n-1 的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,但不知道有幾個(gè)數(shù)字重復(fù)了,也不知道每個(gè)數(shù)字重復(fù)了幾次。請(qǐng)找出數(shù)組中任意一個(gè)重復(fù)的數(shù)字。 示例 1: 限制: 方法一:哈希 方法二:原地交

    2024年02月03日
    瀏覽(14)
  • LeetCode 周賽 344(2023/05/07)手寫遞歸函數(shù)的固定套路

    本文已收錄到 AndroidFamily,技術(shù)和職場(chǎng)問題,請(qǐng)關(guān)注公眾號(hào) [彭旭銳] 提問。 大家好,我是小彭。 今天下午有力扣杯戰(zhàn)隊(duì)賽,不知道官方是不是故意調(diào)低早上周賽難度給選手們練練手。 往期周賽回顧:LeetCode 單周賽第 343 場(chǎng) · 結(jié)合「下一個(gè)排列」的貪心構(gòu)造問題 T1. 找出不同

    2024年02月03日
    瀏覽(18)
  • 【LeetCode】劍指 Offer(27)

    【LeetCode】劍指 Offer(27)

    目錄 題目:劍指 Offer 53 - I. 在排序數(shù)組中查找數(shù)字 I - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦!?。?寫在最后: 那么這道題呢, 如果只是作為一道題,或者說筆試題, 我們當(dāng)然是二話不說直接暴力拿下, 來看代碼: 是的,就是這么簡(jiǎn)單,三行代碼暴力拿下

    2023年04月13日
    瀏覽(22)
  • 【LeetCode】劍指 Offer(28)

    【LeetCode】劍指 Offer(28)

    目錄 題目:劍指 Offer 54. 二叉搜索樹的第k大節(jié)點(diǎn) - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 題目:劍指 Offer 55 - I. 二叉樹的深度 - 力扣(Leetcode) 題目的接口: 解題思路: 代碼: 過啦?。?! 題目:劍指 Offer 55 - II. 平衡二叉樹 - 力扣(Leetcode) 題目的接

    2023年04月24日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包