zoukankan      html  css  js  c++  java
  • leetcode【151】-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".

    思路:

    一个字符一个字符的遍历:

      遇到非空字符->①继续向后遍历

      遇到空字符->①单词入栈;②继续向后遍历

    需要的变量:

      flag:ture状态下遇到空格可将单词入栈;false状态下遇到空格,说明前面是连续的空格,需继续向后遍历;

      beginpos:单词起始位置;

      word:栈,用于存放单词;

     1 #include<string>
     2 #include<stack>
     3 using namespace std;
     4 
     5 
     6 class Solution {
     7 public:
     8     void reverseWords(string &s) {
     9         stack<string> word;
    10         int i = 0;
    11         bool flag = false;
    12         int beginpos = 0;
    13         while (i <= s.size()){
    14             if (0 == i){
    15                 if (s[i] != ' '){
    16                     beginpos = 0;
    17                     flag = true;
    18                 }
    19             }
    20             else if (i < s.size()){
    21                 if (s[i] == ' '){
    22                     if (flag){
    23                         if (word.empty()){
    24                             word.push(s.substr(beginpos, i - beginpos));
    25                         }
    26                         else{
    27                             word.push(" ");
    28                             word.push(s.substr(beginpos, i - beginpos));
    29                         }
    30                         flag = false;
    31                     }
    32                 }
    33                 else{
    34                     if (flag == false){
    35                         beginpos = i;
    36                         flag = true;
    37                     }
    38                 }
    39             }
    40             else if (i == s.size()){
    41                 if (flag){
    42                     if (word.empty()){
    43                         word.push(s.substr(beginpos, i - beginpos));
    44                     }
    45                     else{
    46                         word.push(" ");
    47                         word.push(s.substr(beginpos, i - beginpos));
    48                     }
    49                 }
    50             }
    51             ++i;
    52         }
    53         s.clear();
    54         while (!word.empty()){
    55             s+=word.top();
    56             word.pop();
    57         }
    58     }
    59 };
  • 相关阅读:
    SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
    SQL Server 2008 排序函数 ROW_NUMBER和RANK 用法总结
    数据表基础知识(1)
    数据库基本概念
    String函数
    委托
    递归算法
    关于C#引用类型赋值
    BackgroundWorker的应用
    DevExpress_Report 主从报表绑定数据,分页打印
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6838231.html
Copyright © 2011-2022 走看看