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

做网站出现的常见问题东莞免费建站公司

做网站出现的常见问题,东莞免费建站公司,昌平县城做网站,建立网站 要怎么做一、题目描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在…

一、题目描述

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

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

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

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

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2:

输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:

  • 1 <= s.length <= 10^4
  • s 包含英文大小写字母、数字和空格 ' '
  • s 中 至少存在一个 单词

二、解题思路

  1. 首先,我们需要去除字符串s的前导空格和尾随空格,同时将字符串中间多余的空格缩减为一个空格。
  2. 然后,我们将整个字符串反转。
  3. 接下来,我们需要遍历反转后的字符串,将每个单词反转回原来的顺序。

三、具体代码

class Solution {public String reverseWords(String s) {// 去除前导和尾随空格,并将中间多余空格缩减为一个空格StringBuilder sb = trimSpaces(s);// 反转整个字符串reverse(sb, 0, sb.length() - 1);// 反转每个单词reverseEachWord(sb);return sb.toString();}private StringBuilder trimSpaces(String s) {int left = 0, right = s.length() - 1;// 去除前导空格while (left <= right && s.charAt(left) == ' ') left++;// 去除尾随空格while (left <= right && s.charAt(right) == ' ') right--;// 将中间多余空格缩减为一个空格StringBuilder sb = new StringBuilder();while (left <= right) {char c = s.charAt(left);if (c != ' ') {sb.append(c);} else if (sb.charAt(sb.length() - 1) != ' ') {sb.append(c);}left++;}return sb;}private void reverse(StringBuilder sb, int start, int end) {while (start < end) {char temp = sb.charAt(start);sb.setCharAt(start, sb.charAt(end));sb.setCharAt(end, temp);start++;end--;}}private void reverseEachWord(StringBuilder sb) {int n = sb.length();int start = 0, end = 0;while (start < n) {// 循环至单词的末尾while (end < n && sb.charAt(end) != ' ') end++;// 翻转单词reverse(sb, start, end - 1);// 更新start,去找下一个单词end++;start = end;}}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • trimSpaces 方法:这个方法遍历了整个字符串一次,所以时间复杂度是 O(n),其中 n 是字符串的长度。
  • reverse 方法:这个方法是用来翻转字符串的一部分,它的时间复杂度是 O(m),其中 m 是要翻转的部分的长度。
  • reverseEachWord 方法:这个方法遍历了整个字符串一次,并且在每个单词上调用了一次 reverse 方法。假设单词的平均长度是 k,那么这个方法的时间复杂度是 O(n + k),其中 n 是字符串的长度,k 是单词的平均长度。

综合起来,整个算法的时间复杂度是 O(n + k),因为 trimSpaces 和 reverseEachWord 都是遍历整个字符串,而 reverse 是在单个单词上操作,所以单词的总长度是 n。

2. 空间复杂度
  • trimSpaces 方法:这个方法创建了一个新的 StringBuilder 来存储处理后的字符串,所以空间复杂度是 O(n),其中 n 是字符串的长度。
  • reverse 方法和 reverseEachWord 方法:这两个方法都是原地操作,没有使用额外的空间,所以它们的空间复杂度是 O(1)。

综合起来,整个算法的空间复杂度是 O(n),因为 trimSpaces 方法创建了一个新的 StringBuilder 来存储处理后的字符串。

五、总结知识点

  1. 字符串处理:对字符串进行遍历、去除前后空格、缩减中间多余空格等操作。

  2. StringBuilder 类的使用:StringBuilder 是一个可变的字符序列,用于高效地拼接字符串、修改字符串内容等。

  3. 字符串反转:通过交换字符串首尾字符的位置,实现字符串的反转。

  4. 循环和条件语句:使用 while 循环和 if 条件语句来控制程序的逻辑流程。

  5. 字符数组与字符串的转换:StringBuilder 在内部维护一个字符数组,可以通过 append 方法添加字符,最终通过 toString 方法转换为字符串。

  6. 边界条件处理:在去除前后空格和反转字符串时,需要考虑字符串为空或只有一个字符的边界情况。

  7. 函数封装:将去除空格、反转字符串、反转每个单词等功能封装成单独的函数,提高代码的可读性和可维护性。

  8. 指针或索引的使用:在遍历字符串时,使用指针或索引来跟踪当前处理的位置。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

http://www.tj-hxxt.cn/news/88750.html

相关文章:

  • 网站建设服务的风险看b站视频下载软件
  • 如何在个人电脑用源码做网站百度指数平台
  • 建设银行网站的特点优势桌子seo关键词
  • 爱站工具想说超人下拉系统强化防疫指导
  • 网站建设公司推广百度推广托管公司
  • 杭州做代发的网站有哪些培训总结
  • 网站报纸什么软件做seo外链专员
  • 搞定设计青岛seo代理计费
  • 做绿色软件的网站知乎怎么建网站
  • 做代购有哪些网站软件怎么推广
  • 模版做网站多少钱百家号关键词seo优化
  • seo 新旧网站 两个域名西安百度推广优化公司
  • 北京网站建设最便宜的公司百度推广seo是什么意思
  • 学校专业建设备案网站英雄联盟韩国
  • java做网站学什么聚名网域名
  • 用html5做的简单的网站网站开发流程有哪几个阶段
  • 广州房地产网站建设方案网页模板源代码
  • 网站维护费怎么做分录注册一个公司网站需要多少钱
  • 建筑工程网络图视频教程游戏优化大师官方下载
  • 常德公交网站快排seo排名软件
  • 自己编写的网站如何放到wordpress百度关键词快排
  • 一个网站能用asp c微信公众号平台官网
  • 珠海市住房建设局网站中牟网络推广外包
  • 广州shopify代建站深圳网络推广哪家公司好
  • 找图片素材网站百度小说搜索风云榜排名
  • 什么建站程序最利于seo长沙建设网站制作
  • 怎么帮别人做网站专业搜索引擎seo公司
  • asp伪静态网站如何做筛选百度推广自己怎么做
  • 电商网站设计平台淘宝关键词搜索量排名
  • 织梦做的相亲网站合肥百度快照优化排名