剑指Offer | day3-字符串

剑指 Offer 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

方法一:调api

利用string类中现成的replace函数

class Solution {
public:
    string replaceSpace(string s) {
        // 一次遍历
        for(int i = 0; i < s.size(); i++) {
            if(s[i] == ' ') {
                s.replace(i, 1, "%20");
            }
        }
        return s;
    }
};

方法二:原地修改+字符替换

思路:第一次遍历记录空格个数,以此推断字符的长度;第二次逆向遍历进行字符串的替换

class Solution {
public:
    string replaceSpace(string s) {       
        // 第一次遍历得到数组的长度
        int count = 0, len = s.size();
        // 统计空格数量
        for (char c : s) {
            if (c == ' ') count++;
        }
        // 修改 s 长度
        s.resize(len + 2 * count);

        // 第二次遍历进行字符替换
        for(int i = len-1, j = s.size()-1; i < j; i--, j--) {
            if(s[i] != ' ') {
                s[j] = s[i];
            }
            else {
                s[j-2] = '%';
                s[j-1] = '2';
                s[j] = '0';
                j -= 2;
            }
        }
        return s;
    }
};

剑指 Offer 58 - II. 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。

示例 :

输入: s = "abcdefg", k = 2
输出: "cdefgab"

限制:

  • 1 <= k < s.length <= 10000

方法一:调api

思路:先拼接字符串,再将字符串前移

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        // 1. 直接拼接
        string tmp;
        tmp.assign(s, 0, n);
        s += tmp;

        // 2. 全部前移
        s.erase(0, n);
        return s;
    }
};
posted @ 2021-09-29 22:03  不是勇士  阅读(34)  评论(0)    收藏  举报