LintCode_053_翻转字符串

来源:互联网 发布:程序员经常看的网站 编辑:程序博客网 时间:2024/06/08 14:38

问题描述

给定一个字符串,逐个翻转字符串中的每个单词。

说明

  • 单词的构成:无空格字母构成一个单词
  • 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  • 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

求解

首先将字符串整体翻转,然后逐个找到单词,再把单词翻转过来

class Solution {public:    /**     * @param s : A string     * @return : A string     */    string reverseWords(string s) {        // Reverse the whole string first.        reverse(s.begin(), s.end());        std::string::size_type begin = 0, end = 0, len = 0;        while ((begin = s.find_first_not_of(" ", end)) != string::npos) {            if ((end = s.find(" ", begin)) == string::npos) {                end = s.length();            }            // Reverse each word in the string.            reverse(s.begin() + begin, s.begin() + end);            // Shift the word to avoid extra space.            move(s.begin() + begin, s.begin() + end, s.begin() + len);            len += end - begin;            if(len < s.length()) {                s[len++] = ' ';            }        }        s.resize(len ? len - 1 : 0);        return s;    }};
原创粉丝点击