代码随想录算法训练营第八天 | 344.反转字符串、541.反转字符串II、剑指offer 05.替换空格、151.翻转字符串里的单词、剑指offer58-II.左旋转字符串

本文记录了在力扣上完成的五道与字符串处理相关的编程题,包括简单的字符串反转、反转字符串的子串、替换空格、翻转单词以及左旋转字符串等。通过这些题目,作者掌握了不同的字符串操作技巧和反转策略,如使用reverse函数、字符遍历和区间反转等。
摘要由CSDN通过智能技术生成

一天做了五道题,还好这几道题还算比较简单

344.反转字符串

力扣题目链接

思路

简单的字符串反转,好像没啥思路可以说的,甚至可以直接用reverse

代码实现

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

 541.反转字符串II

力扣题目链接

 思路

反转k个字符,然后跳过k个字符,反转k个字符,然后跳过k个字符......

代码实现

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

收获

reverse反转时是左闭右开区间。

剑指offer 05.替换空格

力扣题目链接

代码实现

class Solution {
public:
    string replaceSpace(string s) {
        string res;

        for(auto c : s)
        {
            if(c==' ')
                res += "%20";
            else
                res += c;
        }
        return res;
    }
};

 收获

第一次使用使用char类型的这种for循环。

熟悉了string的使用,可以直接加。

151.翻转字符串里的单词

力扣题目链接

思路

先去除前导空格和尾随空格

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

 然后进行反转就可以了

代码实现

class Solution {
public:
    string reverseWords(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);
        reverse(s.begin(), s.end());
        int start = 0;
        for(int i = 0 ; i <= s.size(); i ++)
        {
            if(i==s.size()||s[i]==' ')
            {
                reverse(s.begin()+start, s.begin()+i);
                start = i+1;
            }
        }
        return s;
    }
};

剑指offer58-II.左旋转字符串

力扣题目链接

 思路

反转前k个,反转后面的,然后整天反转,就可以得到结果了!!!

是不是很奇妙!!!

代码实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值