算法学习Day07 | LeetCode 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串

一、LeetCode 344.反转字符串

题目链接:344. Reverse String - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

1、双指针

代码

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

复杂度分析

时间复杂度:O(N),其中 N 为字符数组的长度。一共执行了 N/2 次的交换。
空间复杂度:O(1)。

二、LeetCode 541. 反转字符串II

题目链接:541. Reverse String II - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

1、模拟

代码

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.size();
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        for (int i = 0; i < n; i += 2 * k) {
            if (i + k <= n) {
                // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
                reverse(s.begin() + i, s.begin() + i + k);
            } else {
                // 3. 剩余字符少于 k 个,则将剩余字符全部反转
                reverse(s.begin() + i, s.end());
            }
        }
        return s;
    }
};

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

三、LeetCode 剑指Offer 05.替换空格

题目链接:LCR 122. 路径加密 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

1、双指针法

代码

class Solution {
public:
    string replaceSpace(string s) {
        int count = 0; // 统计空格的个数
        int sOldSize = s.size();

        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                count++;
            }
        }
        // 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
        s.resize(s.size() + count * 2); // 这里乘以2是因为"%20"占3个字符,原来的空格占1个字符
        int sNewSize = s.size();

        // 从后先前将空格替换为"%20"
        for (int i = sNewSize - 1, j = sOldSize - 1; j < i; i--, j--) {
            if (s[j] != ' ') {
                s[i] = s[j];
            } else {
                s[i] = '0';
                s[i - 1] = '2';
                s[i - 2] = '%';
                i -= 2;
            }
        }
        return s;
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

四、LeetCode 151.翻转字符串里的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

代码

复杂度分析

五、LeetCode 剑指Offer58-II.左旋转字符串

题目链接:LCR 182. 动态口令 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

代码

复杂度分析

你可能感兴趣的:(算法,算法,学习,leetcode,c++,数据结构,笔记,面试)