当前位置: 首页 > wzjs >正文

灵山网站建设引擎搜索下载

灵山网站建设,引擎搜索下载,做暧嗳网站,设计师网课LeetCode 151. 反转字符串中的单词 解析 这个问题要求将给定字符串中的单词顺序反转,同时移除多余空格,使得每个单词之间只有一个空格,且字符串首尾无空格。 方法思路 最优解法是原地反转法:通过三次反转操作实现单词顺序的反转…

LeetCode 151. 反转字符串中的单词 解析

这个问题要求将给定字符串中的单词顺序反转,同时移除多余空格,使得每个单词之间只有一个空格,且字符串首尾无空格。

方法思路

最优解法是原地反转法:通过三次反转操作实现单词顺序的反转,同时处理多余空格。具体步骤如下:

  1. 移除多余空格
    将字符串中的多余空格去除,只保留单词间的单个空格,并调整字符串长度。

  2. 整体反转
    将处理后的字符串整体反转。

  3. 单词反转
    遍历字符串,对每个单词进行局部反转,恢复单词的原始顺序。

C++ 代码实现

#include <string>
#include <algorithm>class Solution {
public:string reverseWords(string s) {// 1. 移除多余空格int i = 0, j = 0;  // i 为写入指针,j 为读取指针while (j < s.length()) {// 跳过前导空格while (j < s.length() && s[j] == ' ') j++;if (j >= s.length()) break;  // 处理全空格的情况// 添加单词和中间空格if (i != 0) s[i++] = ' ';  // 单词间添加一个空格while (j < s.length() && s[j] != ' ') {s[i++] = s[j++];}}s.resize(i);  // 调整字符串长度// 2. 整体反转reverse(s.begin(), s.end());// 3. 逐个单词反转i = 0;for (int j = 0; j <= s.length(); j++) {if (j == s.length() || s[j] == ' ') {  // 遇到空格或字符串末尾reverse(s.begin() + i, s.begin() + j);i = j + 1;  // 更新下一个单词的起始位置}}return s;}
};

代码解释

  1. 移除多余空格

    • 使用双指针 ij,其中 j 用于遍历原字符串,i 用于写入处理后的字符。
    • 跳过前导空格,遇到单词时将其复制到 i 位置,并在单词间添加单个空格。
    • 最终使用 resize(i) 调整字符串长度,去除尾部冗余字符。
  2. 整体反转
    使用 reverse(s.begin(), s.end()) 将整个字符串反转,此时单词顺序已反转,但每个单词内部字符顺序也被反转。

  3. 单词反转

    • 遍历字符串,每当遇到空格或字符串末尾时,将当前单词(从 ij-1)进行局部反转。
    • 更新 i 为下一个单词的起始位置(j+1)。

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。每个字符最多被处理三次(移除空格、整体反转、单词反转)。
  • 空间复杂度:O(1),仅需常数级的额外空间。

示例

输入:s = " hello world! "
输出:"world! hello"
解释

  1. 移除多余空格"hello world!"
  2. 整体反转"!dlrow olleh"
  3. 单词反转"world! hello"

关键点

  1. 原地修改
    通过双指针法在原字符串上直接操作,避免额外空间开销。

  2. 三次反转策略
    整体反转+单词反转的组合巧妙地实现了单词顺序的反转,同时保持单词内容正确。

  3. 边界处理

    • 处理字符串首尾的多余空格。
    • 处理连续多个空格的情况。
    • 处理空字符串或全空格字符串的情况。

这种方法高效且符合题目要求,是解决此类问题的经典思路。

方法二:

class Solution {
public:string reverseWords(string s) {stringstream ss(s);vector<string> words;string word;while (ss >> word){words.emplace_back(word);}string res = words[words.size() - 1];for (int i = words.size() - 2; i >= 0; --i){res += " ";res += words[i];}return res;}
};
http://www.dtcms.com/wzjs/50676.html

相关文章:

  • wd怎样建设一个网站如何做百度搜索推广
  • 成品网站nike源码1688营销策划
  • 成华区微信网站建设网站群发软件
  • 企业网站整合软件外包公司是什么意思
  • 太仓市住房和城乡建设局规网站国外搜索引擎网站
  • wordpress安装在哪seo招聘
  • 做庭院的网站厦门seo怎么做
  • 兰州论坛网站建设长沙网络推广只选智投未来
  • 为网站做推广海外网络推广平台
  • ps做设计想接私活在什么网站seo外包一共多少钱
  • 金坛做网站公司真正免费的网站建站平台推荐
  • 自己的电脑可以做网站服务器吗sem推广竞价
  • 专业手机网站建设推荐免费发布信息
  • 网站建设为大学生服务线上怎么做推广和宣传
  • 网页版梦幻西游火眼金睛搜索引擎优化公司排行
  • 网站上展示手机页面是怎么做的打开百度浏览器
  • 设计网站下载宁宁网seo
  • 做网站怎么做多少钱关键词seo优化软件
  • 车轮违章查询是什么网站开发html网页制作代码大全
  • 做水果的网站北京百度推广客服电话多少
  • 域名有没有被注册哪个网站最好微信指数
  • php网站建设教程 电子书怎样做网站平台
  • 是在百度中建设网站?灰色行业推广渠道
  • 创建网站英语五种关键词优化工具
  • 怎样做销售网站seo的工作原理
  • 怎么在主机上的建设网站软文范文大全1000字
  • 凡科官网首页百度seo优化排名
  • 赣州章贡区人口怎么优化网站性能
  • 国家卫生健康委主任淘宝关键词优化推广排名
  • java开发做网站站内推广方案