专栏首页SnailTyanReverse Words in a String

Reverse Words in a String

1. Description

2. Solution

  • First Try
class Solution {
public:
    void reverseWords(string &s) {
        removeSpace(s);
        reverseWords(s, 0, s.size() - 1);
        int index = -1;
        int start = 0;
        while((index = s.find(" ", index + 1)) != string::npos) {
            reverseWords(s, start, index - 1);
            start = index + 1;
        }
        reverseWords(s, start, s.size() - 1);
    }

    void reverseWords(string& s, int start, int end) {
        for(int i = start, j = end; i < j; i++, j--) {
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }

    void removeSpace(string &s) {
        s.erase(0, s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
        int i = 0;
        int j = 1;
        while(j < s.size()) {
            if(s[j] == ' ' && s[j - 1] != ' ') {
                i = j;
            }
            if(s[j] == ' ' && s[j + 1] != ' ' && i != j) {
                s.erase(i + 1, j - i);
                j = i;
            }
            j++;
        }
    }
};
  • Second Try
class Solution {
public:
    void reverseWords(string &s) {
        reverseWords(s, 0, s.size() - 1);
        removeAndRemoveMiddleSpace(s);
    }

    void reverseWords(string& s, int start, int end) {
        for(int i = start, j = end; i < j; i++, j--) {
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }

    void removeAndRemoveMiddleSpace(string &s) {
        s.erase(0, s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
        int i = 0;
        int j = 1;
        int k = 0;
        while(j < s.size()) {
            if(s[j] == ' ' && s[j - 1] != ' ') {
                reverseWords(s, k, j - 1);
                i = j;
            }
            if(s[j] == ' ' && s[j + 1] != ' ') {
                if(i != j) {
                    s.erase(i + 1, j - i);
                    j = i;
                }
                k = j + 1;
            }
            j++;
        }
        reverseWords(s, k, j - 1);
    }
};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Leetcode 119. Pascal's Triangle II

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.cs...

    Tyan
  • Leetcode 303. Range Sum Query - Immutable

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • Bitwise AND of Numbers Range

    Tyan
  • 500Startups第16次Demo Day里有这10家创业企业

    YoDerm ? 想找到一名皮肤病专家让你看病非常难,而且也很耗时间,但是美国数百万青春痘患者可不想等—要么就花钱让专家给你诊断。YoDerm将青春痘患者和...

    点滴科技资讯
  • Qt线程使用的两种方法

    一个QThread实例管理程序中的一个线程。QThread的执行开始于run()。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件...

    Qt君
  • ASP.NET生成随机验证码代码和看不清切换验证码的小结

    ============================================================

    阳光岛主
  • 【PAT乙级】最好吃的月饼

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • internet 的一词多义

    这是在《unix网络编程》中看到的比较全面的解释,在此作为一个整理。 一 是网际网,采用TCP/IP协议族通信的任何网络都是网际网,因特网就是一个网际网。 二 ...

    CloudDeveloper
  • 稀缺2声母域名TJ.COM成功易主

    二字母域名HY.com曝出易主的消息,热度还未散去,今天又得知,又有一枚二字母.com域名被曝易主。真是越到了年底,米市也越来越火爆热闹了。

    躲在树上的域小名
  • 数据结构是哈希表(hashTable)

    哈希表也称为散列表,是根据关键字值(key value)而直接进行访问的数据结构。也就是说,它通过把关键字值映射到一个位置来访问记录,以加快查找的速度。这个映...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券