Reverse Words in a String

来源:互联网 发布:淘宝交易订单生成器 编辑:程序博客网 时间:2024/06/05 19:11

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".

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.
题目:反转句子中的单词。

分析:两次反转。先将整个句子反转,然后每个单词反转。本来思想比较简单直接,扫描两遍即可O(N)。空格的处理坑死人。 注意处理句子两头的空格,单词间隔中间多个空格的压缩成一个空格。

代码:

class Solution {public:    void reverseWords(string &s) {//基本思想,两次反转        if(s.length()<1) return ;        //1.第一次反转        reverse(s.begin(),s.end());        int len=s.length();//去空格int i=0;while(i<len && s[i]==' ') i++;if(i>=len) {s=""; return;}s.erase(0,i);len=len-i;//erase后串长度变化,要更新串长int k=-1; //k i两个指针一前一后,去掉单词中间多余的空格for(i=0;i<len;i++){if(s[i]!=' '){k++; s[k]=s[i];}else if((i<len-1) && s[i]==' ' && s[i+1]==' '){continue;}else{// if(s[i]==' ' && s[i+1]!=' ')if(i==len-1){//最后一个是字符if(s[i]!=' ') {k++; s[k]=s[i];}break;} k++;s[k]=s[i];}}//删除末尾多余的空间k++;s.erase(k);                 i=0;len=k;//更新串长度        int j=i;        for(;i<len;i++){            if(s[i]==' '){                reverse(s.begin()+j,s.begin()+i);j=i;                while(i<len && s[i]==' '){    i++; j++;}            }        }//forif(i>=len && j<len){reverse(s.begin()+j,s.begin()+i);//最后一个单词无法用空格判断}        return ;    }};

方法二:

声明一个变量,来存储反转后的结果,然后赋值给s。从后往前扫描,遇到单词,反转。

class Solution {public:    void reverseWords(string &s)  {          string rs;          for (int i = s.length()-1; i >= 0; )          {              while (i >= 0 && s[i] == ' ') i--;              if (i < 0) break;              if (!rs.empty()) rs.push_back(' ');              string t; //存储单个单词             while (i >= 0 && s[i] != ' ') t.push_back(s[i--]);              reverse(t.begin(), t.end());//单词反转              rs.append(t);  //放入结果中        }          s = rs;      }  };


0 0
原创粉丝点击