Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
1
2
3
4
5 > > >Input: "Let's take LeetCode contest"
> > >Output: "s'teL ekat edoCteeL tsetnoc"
> > >
> > >
> >
>
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
题意说的是需要将一个字符串中的每个单词进行反转。
我想到的思路比较纯粹。
- 先将字符串切分成逐个的单词
- 对逐个单词进行反转操作,即以中间字符作为对称轴对称交换
- 对反转后单词进行拼接,还原成一个字符串
其中比较难得是第一项,因为c++并不像Python那样,并没有可以直接调用string的split方法就能将字符串切割成单词的优势。所以就在网上寻找c++的string的切割方法,最后发现其实都是手动切割的。就抄了一个代码比较精简的切割方法。
而且,这道题在提交代码之后出现之后出现了RuntimeError,Google了之后才发现是自己的代码写得有漏洞,没有考虑到vector为空的情况。因为vector.size()返回的是一个无符号整数,一旦size为0,那么再继续-1之后就会溢出,造成错误!所以调用size()再减一的时候一定要判断size是否为0,避免再次出错。
1 | class Solution { |