风雨雾凇 风雨雾凇
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

风雨雾凇

技术小渣渣
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang

  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • leetcode

    • 两数之和-1
    • 无重复字符的最长子串-3
    • 整数翻转-7
    • 回文数-9
    • 13-罗马数字转整数
    • 最长公共前缀
    • 3Sum
    • Valid Parentheses
    • Merge Two Sorted Lists
    • Remove Duplicates from Sorted Array
    • Remove Element
    • Implement strStr()
    • Search Insert Position
    • Count and Say
    • 字符串相乘
    • Maximum Subarray
    • Length of Last Word
    • Plus One
    • Add Binary
    • Sqrt(x)
    • 翻转字符串里的单词
      • 思路:
      • 代码
      • 官方最佳答案:
    • 字符串的排列
  • 机器学习

  • 技术
  • leetcode
风雨雾凇
2019-01-15
目录

翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

示例:

输入: "the sky is blue",
输出: "blue is sky the".
1
2

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶: 请选用C语言的用户尝试使用 O(1) 空间复杂度的原地解法。

题目地址:这里~ (opens new window)

# 思路:

java暴力破解。

# 代码

public class 翻转字符串里的单词 {
    public static String reverseWords(String s) {
        // 健壮性判空
        if (s.trim().isEmpty())
            return "";
        String[] ss = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = ss.length - 1; i >= 0; i--) {
            if (!ss[i].isEmpty()){
                sb.append(ss[i]).append(" ");
            }
        }
        // 删除最后添加的空格
        return sb.deleteCharAt(sb.length()-1).toString();
    }

    public static void main(String[] args) {
        System.out.println(reverseWords("     "));
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

注意特殊值的判断。

# 官方最佳答案:

public class Solution {
    public String reverseWords(String s) {
        if(s.length()==0)return s;
        char[] ch=s.toCharArray();
        char[] res=new char[ch.length];
        int len=helper(ch,ch.length-1,res,0,0);
        return new String(res,0,len);
    }
    private int helper(char[] ch,int r,char[] res,int l,int len){
        while(r>=0&&ch[r]==' '){
            r--;
        }
        if(r<0)return Math.max(0,len-1);
        int rigth=r;
        while(r>=0&&ch[r]!=' '){
            r--;
        }
        len+=rigth-r+1;
        for(int left=r+1;left<=rigth;left++,l++){
            res[l]=ch[left];
        }
        if(l<res.length){
            res[l++]=' ';
        }
        return helper(ch,r,res,l,len);
    }
}

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
编辑 (opens new window)
#leetcode#每日训练#算法#面试#学习笔记
上次更新: 2023/02/17, 16:53:03
Sqrt(x)
字符串的排列

← Sqrt(x) 字符串的排列→

最近更新
01
builtin
02-12
02
导读
02-12
03
13-罗马数字转整数
01-30
更多文章>
Theme by Vdoing | Copyright © 2017-2023 风雨雾凇 | 粤ICP备16018321号-2
博客内容遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式