C++ 中反转字符串中的单词
假设我们有一个包含一些单词的字符串。我们需要反转字符串中的单词位置。所以如果字符串像“The quick brown fox jumps over a lazy dog”
为了解决这个问题,我们将遵循以下步骤:
定义一个函数 getString(),它将 s 作为输入,它将按以下方式工作:
i := 0,j := s 的大小 – 1
当 s[i] = ' ' 且 i < s 的大小,将 i 增加 1
当 j >= 0 且 s[j] = ' ',将 j 减少 1
ret := 空字符串
对于 i <= j,将 i 增加 1
如果 ret 的大小不为零,并且 ret 的最后一个元素是 ' ' 且 s[i] 是 ' ',则进入下一个迭代
ret := ret + s[i]
定义另一个名为 reverseWords() 的方法,它将 s 作为输入
j := 0
对于 I 在 0 到 s 的大小 – 1 的范围内,在每一步设置 i := j
如果 s[i] 是空格,则 j := i + 1
否则
当 j + 1 < s 的大小且 s[j + 1] 不是空格,则将 j 增加 1
x := i 且 y := j
当 x < y
交换 s[x] 和 s[y],将 x 增加 1 并将 y 减少 1
将 j 增加 1
从主方法中,执行以下操作:
反转字符串 s
reverseWords(s)
返回 getString(s)
示例(C++)
让我们看看下面的实现来更好地理解:
#include <bits/stdc++.h> using namespace std; class Solution { public: string reverseWords(string s) { reverse(s.begin(), s.end()); reverseWordss(s); return getString(s); } string getString(string s){ int i = 0; int j = s.size() - 1; while(s[i] == ' ' && i < s.size()) i++; while(j >= 0 && s[j] == ' ') j--; string ret = ""; for(;i <= j; i++){ if(ret.size() && ret.back() == ' ' && s[i] == ' ')continue; ret += s[i]; } return ret; } void reverseWordss(string& s){ int j = 0; for(int i = 0; i < s.size() ;i = j){ if(s[i] == ' '){ j = i + 1; } else{ while(j + 1 < s.size() && s[j + 1] != ' ') j++; int x = i; int y = j; while(x < y){ swap(s[x], s[y]); x++; y--; } j++; } } } }; main(){ Solution ob; cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog")); }
输入
"The quick brown fox jumps over a lazy dog"
输出
"dog lazy a over jumps fox brown quick The"
广告