剑指offer——Day03字符串(简单)

Day3 2022.11.9 字符串(简单)

05.替换空格

自己实现

遍历字符串中查找空格位置,erase空格,insert"%20"

代码如下:

class Solution {
public:
    string replaceSpace(string s) {
        for(int i=0;i<s.size();i++)
        {
            if(s[i]==' ')
            {
                s.erase(i,1);
                s.insert(i,"%20");
            }
        }
        return s;
    }
};

代码表现

这个为啥时间消耗这么多...可能是调用STL方法的原因

题解

1个空格换成3个字符长度的"%20",因此新字符串的长度为原长度+2*空格数量,利用这个倒序地把字符串拉长

代码如下:

class Solution {
public:
    string replaceSpace(string s) {
        int length=s.size();
        int cnt=0;
        for(int i=0;i<length;i++)
        {
            if(s[i]==' ')cnt++;
        }
        s.resize(length+2*cnt);
        for(int i=length-1,j=s.size()-1;i<j;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;
    }
};

代码表现

好快...

hint:

  • 类数组的结构往里插入东西可以采用题解的这种倒序把原来的东西往后拉的方式

58.Ⅱ.左旋转字符串

自己实现

这个题很简单,就把前面n个长度的子串append到字符串后面,然后再erase首部n个字符即可

代码如下:

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        s.append(s.substr(0,n));
        s.erase(0,n);
        return s;
    }
};

代码表现:

完美咯

题解:

这个题太简单了,就不看题解了

posted @ 2022-11-15 15:23  神鹏佐佑  阅读(18)  评论(0)    收藏  举报