• Reverse Words in a String leetcode


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

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


    For C programmers: Try to solve it in-place in O(1) space.

    Clarification:
    • What constitutes a word?
      A sequence of non-space characters constitutes a word.
    • Could the input string contain leading or trailing spaces?
      Yes. However, your reversed string should not contain leading or trailing spaces.
    • How about multiple spaces between two words?
      Reduce them to a single space in the reversed string.
    这个题如果用C++的stringstream字符串流来实现的话,会非常简单
    void reverseWords(string &s) {
        istringstream is(s);
        string tmp;
        is >> s;
        while(is >> tmp) s = tmp + " " + s;
        if(s[0] == ' ') s = "";
    }

    但是,题目中对于C语言实现有更严格的要求,需要就地操作

    联想到之前碰到的题目,数组旋转问题,我们是否可以用类似的思路来解决呢

    对于每一个单词,都将其字母前后逆置,然后再将整个字符串逆置,这样就可以得到正确反转结果了。

    但是如何处理多余的空格呢?我们可以在遍历的同时,利用快慢双指针来将空格省略掉。然后再执行逆置操作。

    代码如下:

    void reverseWords(string &s) {
    
        int i = 0, j = 0;
        int l = 0;
        int len = s.length();
        int wordcount = 0;
    
        while (true) {
            while (i<len && s[i] == ' ') i++;
            if (i == len) break;
            if (wordcount) s[j++] = ' ';
            l = j;
            while (i<len && s[i] != ' ') { s[j] = s[i]; j++; i++; }
            reverseword(s, l, j - 1);
            wordcount++;
        }
    s.resize(j);
    reverseword(s, 0, j - 1); }
  • 相关阅读:
    html自定义加载动画
    数据结构与算法:贪心算法简介
    WEB 前端常用字体和色值你知道多少?
    为什么浮点精度运算会有问题
    Java 字符串格式示例
    使用 Java 和 Maven (JBake) 生成静态网站
    硅谷钢铁侠
    Flink中的5种窗口使用场景
    prometheus-operator监控k8s资源
    fluentd收集k8s集群pod日志
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/5152364.html
Copyright © 2020-2023  润新知