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

做网站是不是要学编程网站建设与网站设计

做网站是不是要学编程,网站建设与网站设计,建设网站公司中,企业邮箱注册申请免费流程目录 151、反转字符串中的单词题目描述思路代码本题反思 151、反转字符串中的单词 题目描述 给你一个字符串 s ,请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 返回单词顺序颠倒且单词之间用单个…

目录

  • 151、反转字符串中的单词
    • 题目描述
    • 思路
    • 代码
    • 本题反思

151、反转字符串中的单词

题目描述

给你一个字符串 s ,请你反转字符串中单词的顺序。

单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。

返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

要求:空间复杂度为O(1);

思路

  1. 去除多余空格:收尾无空格,单词之间只有一个空格
  • 定义快慢指针,快指针负责寻找正确的元素,慢指针负责从头开始给字符串赋值。
  1. 反转字符串
  2. 反转单个单词

代码

class Solution {
public://原地反转字符串void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++,j--) {swap(s[i], s[j]);//交换操作}}//去除多余空格void removeExtraSpaces(string& s) {int slowIndex = 0, fastIndex = 0; // 定义快指针,慢指针// 去掉字符串前面的空格while (s.size() > 0 && fastIndex < s.size() && s[fastIndex] == ' ') {fastIndex++;}for (; fastIndex < s.size(); fastIndex++) {// 去掉字符串中间部分的冗余空格if (fastIndex - 1 > 0 && s[fastIndex] == ' ' && s[fastIndex - 1] == s[fastIndex]) {continue;} else {s[slowIndex++] = s[fastIndex];}}if (slowIndex - 1 > 0 && s[slowIndex - 1] == ' ') { // 去掉字符串末尾的空格s.resize(slowIndex - 1);} else {s.resize(slowIndex); // 重新设置字符串大小}
}//反转字符串中的单词string reverseWords(string s) {removeExtraSpaces(s);//去除多余空格reverse(s, 0, s.size() - 1);//原地反转所有字符//开始逐个反转单词int start = 0;//指向每一个单词的开头for (int i = 0; i <= s.size(); ++i) {if (i == s.size() || s[i] == ' ') {//到达空格或字符串尾部,说明一个单词结束,进行反转reverse(s, start, i - 1);start = i + 1;//把start指向下一个单词的开头}}return s;}
};

优化【去除多余空格函数】之后的代码

class Solution {
public://原地反转字符串void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++,j--) {swap(s[i], s[j]);//交换操作}}//去除空格void removeExtraSpaces(string& s) {int slow = 0;//慢指针辅助赋值操作for (int i = 0; i < s.size();i++) {if (s[i] != ' ') {//如果目前遍历到的字符不是空格,就进行处理if (slow != 0) s[slow++] = ' ';//给每个单词之间添加空格while (i < s.size() && s[i] != ' ') {s[slow++] = s[i++];}}}s.resize(slow);//slow的大小就是删除多余空格后字符串的大小
}//反转字符串中的单词string reverseWords(string s) {removeExtraSpaces(s);//去除多余空格reverse(s, 0, s.size() - 1);//原地反转所有字符//开始逐个反转单词int start = 0;//指向每一个单词的开头for (int i = 0; i <= s.size(); ++i) {if (i == s.size() || s[i] == ' ') {//到达空格或字符串尾部,说明一个单词结束,进行反转reverse(s, start, i - 1);start = i + 1;//把start指向下一个单词的开头}}return s;}
};

时间复杂度:O(n);
空间复杂度:O(1);原地修改字符串。

本题反思

  • 对于字符串的操作类似于数组,也是利用双指针查找正确元素然后进行覆盖操作达到修改字符串的目的。
  • 寻找正确字符的过程就是去除多余空格的过程。
  • 比起整体反转字符串,加入了在整体字符串中反转其中的单词,这需要额外添加条件判断。
http://www.khdw.cn/news/12005.html

相关文章:

  • 网站镜像 cdnqq群排名优化
  • 西宁最好的建站公司权重查询站长工具
  • 如何重新打开wordpress重庆白云seo整站优化
  • 做推广网站的文章术语拼多多搜索关键词排名
  • 做百度网站需不需要备案ds2600ii色带
  • wordpress 企业模板 免费seo百度首页排名业务
  • 视频号分销解决方案的特点武汉seo工厂
  • 福州市连江县建设局网站seo百度关键词优化软件
  • 网络电子商务购物网站百度搜索引擎营销
  • 做网站的软件dw烟台网站建设
  • 杭州 做网站seo舆情优化
  • 济南城市建设集团有限公司网站拉新充场app推广平台
  • 西安市商标局seo排名分析
  • 数字广东网络建设有限公司地址关键词优化包年推广
  • flash网站模板修改北京互联网公司有哪些
  • 模板网站建设哪家好怎么做市场营销和推广
  • 网站开发前后端分离要多少钱中国关键词网站
  • 网站怎么做json数据seo排名怎么优化软件
  • 成都建网站比较好的公司6今天今日头条新闻
  • 网站图文列表西安百度关键词排名服务
  • 做电影电视剧网站推广电脑版百度网盘
  • 做网站首页的软件b2b免费发布信息网站
  • 江门建设银行网站google谷歌
  • 一起做网站广州批发市场云服务器
  • 微网站php源码杭州seo网
  • ps软件下载官方网站百度推广售后
  • 视觉差的网站电商培训班
  • 濮阳网站建设电话百度营销网页版
  • 换了家公司做网站如何接入备案广告联盟平台
  • 建设校园标准信息服务网站论文凡科建站客服电话