当前位置:   article > 正文

力扣 151反转字符串中的单词

力扣 151反转字符串中的单词

思路

单词前面有空格,后面有空格,中间有多余空格

1去掉多余空格

2全部翻转

3单词内部翻转

这里也用双指针,一个start,一个end,当end遇到空格(即一个单词的结尾)或者是到达字符串s的末尾时

reverse(s,start,end-1)

  1. //去除空格逻辑,双指针
  2. void removeEmpty(string &s)
  3. {
  4. int slow = 0;
  5. for(int fast =0;fast<s.size();fast++)
  6. {//这里容易遗忘的是for循环里大的逻辑是 s[fast] !=' ' 就是说跳过前面和中间的空格
  7. if(s[fast] !=' ')
  8. {
  9. if(slow != 0)//已经有一个单词了,这时需要添加一个空格
  10. {
  11. s[slow++] = ' ';
  12. }
  13. //如果遇到单词,将fast指针的部分复制到slow指针位置
  14. while(fast<s.size() && s[fast] != ' ')
  15. {
  16. s[slow++] = s[fast++];
  17. }
  18. }
  19. }
  20. s.resize(slow);
  21. }
  1. //整体逻辑,先翻转,再去空格,再单词内部翻转
  2. string reverseWords(string s)
  3. {
  4. reverse(s,0,s.size()-1);
  5. removeEmpty(s);
  6. int start=0;
  7. for(int i = 0;i<=s.size();i++)
  8. {
  9. if(i == s.size() ||s[i] ==' ')
  10. {
  11. reverse(s,start,i-1);
  12. start = i+1;
  13. }
  14. }
  15. return s;
  16. }

整体代码如下 

  1. // @before-stub-for-debug-begin
  2. #include <vector>
  3. #include <string>
  4. #include "commoncppproblem151.h"
  5. using namespace std;
  6. // @before-stub-for-debug-end
  7. /*
  8. * @lc app=leetcode.cn id=151 lang=cpp
  9. *
  10. * [151] 反转字符串中的单词
  11. */
  12. // @lc code=start
  13. class Solution
  14. {
  15. public:
  16. //翻转逻辑
  17. void reverse(string &s,int start,int end)
  18. {
  19. while(start<end)
  20. {
  21. swap(s[start],s[end]);
  22. start++;
  23. end--;
  24. }
  25. }
  26. //去除空格
  27. void removeEmpty(string &s)
  28. {
  29. //双指针
  30. int slow = 0;
  31. for(int fast = 0;fast<s.size();fast++)
  32. {
  33. if(s[fast]!=' ')
  34. {
  35. if(slow != 0)
  36. {
  37. s[slow++] = ' ';
  38. }
  39. while(s[fast]!= ' ' && fast<s.size())
  40. {
  41. s[slow++] = s[fast++];
  42. }
  43. }
  44. }
  45. s.resize(slow);
  46. }
  47. //单词内部翻转
  48. string reverseWords(string s) {
  49. //先整体翻转,再去空格
  50. //再单词内部翻转,双指针
  51. reverse(s,0,s.size()-1);
  52. removeEmpty(s);
  53. int start = 0;
  54. for(int i = 0;i<=s.size();i++)
  55. {
  56. if(s[i] == ' '|| i == s.size())
  57. {
  58. reverse(s,start,i-1);
  59. start = i+1;
  60. }
  61. }
  62. return s;
  63. }
  64. };
  65. // @lc code=end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/868932
推荐阅读
相关标签
  

闽ICP备14008679号