LeetCode :: Reverse Words in a String

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

这是LeetCode最新的一道题目,涉及到string的处理,好像之前我都没随机到字符串处理的问题,不得不说C++的字符串处理比C方便太多了,而java比C++又更方便了。这题思路比较清晰,主流思想有两种,一、从后向起扫描,然后每个单词还需要倒一下。二、直接从第一个开始扫描,然后之后的单词接在之前的单词的前面就OK了,不需要调用reverse(这里提一下,调用reverse之后会增加时间复杂度,所以一的方法并不是线性时间复杂度,很多认为是线性时间的人主要是忽略了这个函数的执行时间,虽然确实这题时间复杂度不是关键,这里顺带一提)所以我选用方法二写了程序。

class Solution {
public:
    void reverseWords(string &s) {
       string ans, tmp;
       int k = 0;
       while (s[k] == ' ')
            k++;
       for (int i = k; i < s.size(); ){
            if (s[i] != ' '){
                 //tmp[j++] = s[i]; ERROR! 这里tmp未初始化也没指明大小,不能这么赋值。
                 tmp += s[i++];
            }
            else {
                while (s[i] == ' ')
                    i++;
                if (i == s.size())
                    break;
                ans = " " + tmp + ans;
                tmp = "";
            }
       }
    s = tmp + ans;
    }
};

string这个对象的引入大大方便了对于字符串的处理,下次在这篇中补上string的一些经典知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值