博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Reverse Words in a String
阅读量:5208 次
发布时间:2019-06-14

本文共 2407 字,大约阅读时间需要 8 分钟。

https://oj.leetcode.com/problems/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".

public class Solution {    public static String reverseWords(String s) {        String[] strs = s.split(" ");        String str = "";        for (int i = strs.length; i > 0; i--) {            if (!strs[i - 1].trim().equals("")) {                str += strs[i - 1].trim() + " ";            }        }        return str.trim();    }}

解题思路:

首先trim s,去除开始就有的首尾空格,然后用空格将其split为数组。再倒序,最后trim首尾的空格。

其他思路的解法较多:

例如先倒置整个s,然后从头开始倒置每个单词(遇到空格),再处理头尾的空格和中间的空格。

也可以使用stack的方法,推进去,再取出来。

update 2015/05/28:

二刷,更新一个one pass的解法。从后往前遍历s,记录每个word的左右坐标,然后将其append在结果的后面。

注意,遍历到s的开头,仍然要把第一个word塞进结果。

public class Solution {    public String reverseWords(String s) {        if(s == null || s.length() == 0) {            return s;        }        StringBuffer res = new StringBuffer();        int start = -1, end = -1;        for(int i = s.length() - 1; i >= 0; i--) {            if(s.charAt(i) == ' ') {                if(start != -1 && start <= end) {                    res.append(s.substring(start, end + 1));                    res.append(" ");                }                start = -1;                end = -1;            } else {                if(start == -1) {                    start = i;                    end = i;                } else {                    start = i;                }            }        }        if(start != -1 && start <= end) {            res.append(s.substring(start, end + 1));        }        return res.toString().trim();    }}

 //2018/06/21

public class Solution {    public String reverseWords(String s) {        int head = 0, tail = 0;        String result = "";                while (head < s.length() && tail < s.length()) {            if (s.charAt(head) == ' ') {                head++;            } else {                if(tail < head) {                    tail = head;                }                if (s.charAt(tail) != ' ') {                    tail++;                } else {                    result = s.substring(head, tail) + " " + result;                    head = tail;                }            }        }        if (head < tail) {            result = s.substring(head, tail) + " " + result;        }        return result.trim();    }}

 

转载于:https://www.cnblogs.com/NickyYe/p/4220920.html

你可能感兴趣的文章
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
【redis4 】
查看>>
shell文件查找和压缩命令
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
HDU-1242-Rescue
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
obiee11g中关闭缓存
查看>>
Eclipse中如何开启断言(Assert),方法有二
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>
Eclipse注释模板
查看>>
WordCount运行详解
查看>>
压缩图片 待验证
查看>>
冲刺进度条7
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
MongoDB的数据库、集合的基本操作
查看>>
JS 多种变量定义
查看>>
redis可执行文件说明
查看>>