LeetCode Reverse Words in a String(反转字符串)

本文详细介绍了如何使用C++编程语言实现输入字符串中单词的逆序操作,包括去除首尾空格、处理连续空格以及最终输出逆序后的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:


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

我是用c++ 写的:

 
class Solution {
public:
  void reverseWords(string &s) {
    size_t idx_start = 0;
    size_t idx_end;
    //erase the space at head and trail
    idx_start = s.find_first_not_of(" ");
    s.erase(0, idx_start);
    idx_end = s.find_last_not_of(" ");
    s.erase(idx_end + 1);
    reverse(s.begin(), s.end());
    idx_start = 0;
    string ret;
    string tmp;
    while(true)
    {
      tmp.clear();
      idx_end = s.find(' ', idx_start);
      if(idx_end == string::npos)
        break;
      //deal the sitution of contiguous spaces like "   "
      if(s[idx_start] == ' ')
      {
        idx_start = idx_end + 1;
        continue;
      }
      tmp = s.substr(idx_start, idx_end - idx_start);
      reverse(tmp.begin(), tmp.end());
      ret.append(tmp);
      ret.append(" ");
      idx_start = idx_end + 1;
    }
    //reverse the last word
    tmp = s.substr(idx_start);
    reverse(tmp.begin(), tmp.end());
    ret.append(tmp);
    s = ret;
  }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值