翻转单词顺序

1.题目:

输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格

翻转句子中单词的顺序,但单词内字符的顺序不变。

为简单起见,标点符号和普通字母一样处理。

长度:[0,1000]

样例输入:

I like castal sweet.、

样例输出:

sweet. castal like I 

 思路:这不是简单翻转,他是翻转了顺序但是每一个独立的单词并没有翻转,所以这种肯定不能一次性完全,那就要分几次完全。

你想想,我们既然能够把整体翻转过来,那是不是也可以把每一个单词也翻转过来? 如果想到了这里,说明是有点思路了,但是这个代码怎么打呢? 

好了,这里涉及到一个算法:双指针;我们可以定义二个变量,让他能够每一次都差一个单词的大小不就完了? 

class Solution {
public:
    string reverseWords(string s) {
        reverse(s.begin(),s.end());
        for(int i=0,j;i<s.size();i++)
        {
            j=i;
            while(j<s.size() && s[j]!=' ') j++;
            reverse(s.begin()+i,s.begin()+j);
            i=j;
        }
        return s;
    }
};

还有一种思路,就是用vector容器来写

class Solution {
public:
    string reverseWords(string s) {
        vector<string> data;
        string result;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]!=' ') result+=s[i];
            else data.push_back(" "+result),result="";
        }
        data.push_back(result);
        result="";
        for(int i=data.size()-1;i>=0;i--) {
            result+=data[i];
        }
        return result;
    }
};

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值