lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1. 题目

 

 

题目

 

考查点

这个算法题的考查点是:

  • 字符串的处理,如去除空格,分割单词,拼接字符串等。
  • 双指针的使用,如左右指针,单词边界指针等。
  • 字符串的反转,如整体反转,局部反转等。

2. 解法

思路

这个代码的思路是先去除字符串首尾的空格,然后反转整个字符串,再反转每个单词。这样就可以实现将每个单词逐个翻转的效果。

例如,给定字符串 “the sky is blue”,

  • 经过去除空格后得到 “the sky is blue”,
  • 反转整个字符串后得到 “eulb si yks eht”,
  • 再反转每个单词后得到 “blue is sky the”,就是最终的结果。

 

 

代码的思路。这个代码可以分为三个步骤:

  1. 去除字符串首尾的空格,使得字符串只包含有效的单词和单词之间的空格。
  2. 反转整个字符串,使得每个单词的顺序颠倒,但是每个单词内部的字符顺序不变。
  3. 反转每个单词,使得每个单词内部的字符顺序也颠倒,从而实现将每个单词逐个翻转的效果。

 

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public String reverseWords(String s) {
    s = s.trim(); // 去除首尾空格
    StringBuilder sb = new StringBuilder(); // 用于存储结果
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == ' ' && sb.length() > 0 && sb.charAt(sb.length() - 1) == ' ') {
            continue; // 跳过多余的空格
        } else {
            sb.append(s.charAt(i)); // 添加字符到结果
        }
    }
    int left = 0; // 左指针
    int right = sb.length() - 1; // 右指针
    while (left < right) {
        char tmp = sb.charAt(left); // 交换左右字符
        sb.setCharAt(left, sb.charAt(right));
        sb.setCharAt(right, tmp);
        left++; // 移动左指针
        right--; // 移动右指针
    }
    int boundary = 0; // 单词边界指针
    while (boundary < sb.length()) {
        left = boundary; // 左指针指向单词开头
        while (boundary < sb.length() && sb.charAt(boundary) != ' ') {
            boundary++; // 移动边界指针到单词结尾
        }
        right = boundary - 1; // 右指针指向单词结尾
        while (left < right) {
            char tmp = sb.charAt(left); // 交换左右字符
            sb.setCharAt(left, sb.charAt(right));
            sb.setCharAt(right, tmp);
            left++; // 移动左指针
            right--; // 移动右指针
        }
        boundary++; // 移动边界指针到下一个单词开头
    }
    return sb.toString(); // 返回结果字符串
}

  

3. 总结

posted on   白露~  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-04-28 深入JVM关闭与关闭钩子
2021-04-28 ShutdownHook - Java 优雅停机解决方案
2021-04-28 RocketMQ性能优化
2021-04-28 RocketMQ调优心得总结
2021-04-28 RocketMQ性能优化【实战笔记】
2021-04-28 RocketMQ在面试中那些常见问题及答案+汇总
2019-04-28 24种设计模式的通俗理解
点击右上角即可分享
微信分享提示