C ++中的字符串II中的反向单词

假设我们有一个输入字符串,那么我们必须逐字反转字符串。

因此,如果输入像[“ t”,“ h”,“ e”,“”,“ m”,“ a”,“ n”,“”,“ i”,“ s”,“”,“ n“,” l“,” c“,” e“],则输出为[” n“,” l“,” c“,” e“,”“,” i“,” s“,” “,” m“,” a“,” n“,”“,” t“,” h“,” e“]

为了解决这个问题,我们将遵循以下步骤-

  • 反转数组

  • j:= 0

  • n:= s的大小

  • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

    • 将数组s从索引j反转到i

    • j:= i + 1

    • 如果s [i]与''相同,则-

    • 将数组s从索引j反转为n

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto< v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
    public:
       void reverseWords(vector<char>& s) {
          reverse(s.begin(), s.end());
          int j = 0;
          int n = s.size();
          for(int i = 0; i < n; i++){
             if(s[i] == ' '){
                reverse(s.begin() + j, s.begin() + i);
                j = i + 1;
             }
          }
          reverse(s.begin() + j, s.begin() + n);
       }
    };
    main(){
       Solution ob;
       vector<char> v = {'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'};
       ob.reverseWords(v);
       print_vector(v);
    }

    输入值

    {'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'}

    输出结果

    [n, i, c, e, , i, s, , m, a, n, , t, h, e, ]