当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

[Leetcode] Reverse Words in a String 反转单词顺序

作者:小梦 来源: 网络 时间: 2024-01-30 阅读:

Reverse Words in a String

Given an input string, reverse the string word by word.

For example, Given s = "the sky is blue", return "blue is sky the".

Update (2015-02-12): For C programmers: Try to solve it in-place in O(1) space

使用API

复杂度

时间 O(N) 空间 O(N)

思路

将单词根据空格split开来存入一个字符串数组,然后将该数组反转即可。

注意

  • 先用trim()将前后无用的空格去掉

  • 用正则表达式" +"来匹配一个或多个空格

代码

public class Solution {    public String reverseWords(String s) {        String[] words = s.trim().split(" +");        int len = words.length;        StringBuilder result = new StringBuilder();        for(int i = len -1; i>=0;i--){result.append(words[i]);if(i!=0) result.append(" ");        }        return result.toString();    }}

双指针交换法

复杂度

时间 O(N) 空间 O(N) 如果输入时char数组则是O(1)

思路

先将字符串转换成char的数组,然后将整个数组反转。然后我们再对每一个单词单独的反转一次,方法是用两个指针记录当前单词的起始位置和终止位置,遇到空格就进入下一个单词。

代码

public class Solution {    public String reverseWords(String s) {        s = s.trim();        char[] str = s.toCharArray();        // 先反转整个数组        reverse(str, 0, str.length - 1);        int start = 0, end = 0;        for(int i = 0; i < s.length(); i++){if(str[i]!=' '){    end++;} else {    // 反转每个单词    reverse(str, start, end - 1);    end++;    start = end;}        }        return String.valueOf(str);    }        public void reverse(char[] str, int start, int end){        while(start < end){char tmp = str[start];str[start] = str[end];str[end] = tmp;start++;end--;        }    }}

热点阅读

网友最爱