当前位置: 首页 > 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.hkea.cn/news/241893/

相关文章:

  • 用dede做的网站首页电子商务网络营销
  • 最好的做任务赚钱网站网络域名怎么查
  • 建设部规范网站百度app关键词优化
  • 骏域网站百度怎么收录网站
  • 网站robots.txt查看九江seo公司
  • 建设阿里妈妈网站搜索引擎排名优化seo
  • 自学网站建设作业创建网站免费
  • 营销网站定制的优势成品网站源码的优化技巧
  • 高职学院网站建设方案广告制作
  • table表格 做的网站营销案例分析报告模板
  • pc端网站做移动适配教育培训机构管理系统
  • 页游传奇排行榜无锡seo优化公司
  • 广西南宁网站设计百度seo算法
  • 网站建设服务怎么样近期国内热点新闻事件
  • 阿里巴巴网站国际站建设seo托管服务
  • 企业网站优化之如何做需求分析网奇seo赚钱培训
  • 施工企业会计制度收入确认规定百度自然排名优化
  • 校园网站建设意义网络营销的特点有哪些
  • 内江做网站哪里便宜google搜索关键词热度
  • 福建省建设银行招聘网站网络推广员压力大吗
  • 动态网站订单怎么做搜索引擎优化营销
  • html5行业网站最近有哪些新闻
  • 做网站业务的怎么寻找客户在哪里打广告效果最好
  • 广东深圳seo服务内容
  • 做网站怎么备案网络服务有限公司
  • 网站主页特效欣赏百度官网下载电脑版
  • php mysql开发网站开发任何小说都能搜到的软件
  • the7 wordpress主题宁波seo外包费用
  • 云南建筑培训网seo刷点击软件
  • 男女做暖网站h5页面制作平台