反转字符串里的单词

记录新手小白的做题过程。


题目:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。


思路:这题不用队列用什么!将字符串前k个放入队列中,删除字符串前面的k个字符,然后再在字符串后面加上队列中依次取出的元素。

关于队列(允许插入的端是队尾,允许删除的端是队头):

1.push:队列中由于是先进先出,push即在队尾插入一个元素

2.pop:将队列中最靠前位置的元素拿掉,是没有返回值的void函数

3.front:返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。注意这里只是返回最早进入的元素,并没有把它剔除出队列。

4.back:返回队列中最后一个元素,也就是最晚进去的元素。

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        queue<int> que;
        int i=0;
        while(i<n){//装进队列
            que.push(s[i]);
            i++;
        }
        s.erase(s.begin(),s.begin()+n);//删掉前面几个,左闭右开
        while(!que.empty()){//加入字符串
            s+=que.front();//从头取
            que.pop();//弹出
        }
        return s;
    }
};

其他人的代码1

他的思路和我一样,其实我没有必要用队列,再拿一个字符串来装前n个字符,最后再拼接就好了。

点击链接

class Solution {
public:
    string reverseLeftWords(string str,int n){
        if(str.size()==0) return str;
        string s = str.substr(0,n);//主要是用到了substr函数
        string res = str.substr(n,str.size()-n) + s;//后面的加前面的
        return res;
    }
};

其他人的代码2: 

点击链接

他的思路就是反转。

先反转前n个字符,后反转size-n个字符,然后再整体反转。reverse左闭右开的特性要掌握。

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值