zoukankan      html  css  js  c++  java
  • [string]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".

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

    click to show clarification.

    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.
    class Solution {
    public:
        void formatWords(string& s)
        {
            int sSize = s.size();
            int i=0,j=0,k=sSize;
            while(i<sSize && s[i]==' ') i++;
            while(k>=0 && s[k-1]==' ') k--;
            bool isFirstSpace = true;
            while(i<k){
                if(s[i] != ' '){
                    isFirstSpace = true;
                    s[j++] = s[i++];
                    continue;
                }
                if(isFirstSpace){
                    s[j++] = ' ';
                    isFirstSpace = false;
                }
                i++;
            }
            s.erase(s.begin()+j,s.end());
        }
        void reverseStr(string &s,int startPos,int endPos)
        {
            while(startPos<endPos){
                swap(s[startPos++],s[--endPos]);
            }
        }
        void reverseWords(string &s) {
            formatWords(s);
            int sSize = s.size();
            reverseStr(s,0,sSize);
            int i=0,startPos = 0;
            bool isFirstAlph=true;
            for(;i<sSize;i++){
                if(s[i]==' '){
                    reverseStr(s,startPos,i);
                    isFirstAlph = true;
                    continue;
                }
                if(isFirstAlph){
                    startPos = i;
                    isFirstAlph = false;
                }
            }
            reverseStr(s,startPos,i);
        }
    };
  • 相关阅读:
    把一个List拆分为几个大小一样的List
    错误统一捕捉处理新方式
    1014 C语言文法定义与C程序的推导过程
    0917 词法分析
    0909 对编译原理的理解
    mysql索引
    sql优化的基本原则
    分布式文件系统memcache和ehcache
    Java多线程与并发控制
    HTTP报文
  • 原文地址:https://www.cnblogs.com/zengzy/p/5024096.html
Copyright © 2011-2022 走看看