[Sword refers to offer] 58. Reverse the order of words

Title description

Insert picture description here
Insert picture description here

// 58. 翻转单词顺序


// 力扣
// 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
// 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a st
// udent. ",则输出"student. a am I"。


// 牛客
// 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句
// 子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看
// ,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙
// 原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat
// 对一一的翻转这些单词顺序可不在行,你能帮助他么?


answer

// 力扣
// 力扣条件比牛客宽松,不需要考虑s=" "这种东西,遇到空格直接消除就行,
// 构建StringBuilder res保存答案。for循环顺序遍历s.split(" ")字符组的元素,
// 记为str,如果得到的str为" "或者"",直接continue跳过。
// 如果str是正常字符,使用insert插入到res的队首,然后再插入空格" ",
// 如此循环,每次顺序遍历的字符都被从队首插入,这样整个字符串都会变成
// 相反顺序。最后返回trim()修剪空格的res即可。
// 执行用时:3 ms, 在所有 Java 提交中击败了68.19%的用户
// 内存消耗:38.6 MB, 在所有 Java 提交中击败了18.18%的用户
class Solution {
    public String reverseWords(String s) {
        StringBuilder res = new StringBuilder();
        for (String str : s.split(" ")) { 
            if (str.equals(" ") || str.equals(""))
                continue;
            else {
                res.insert(0, str);
                res.insert(0, " ");
            }
        }
        return res.toString().trim();
    }
}



// 牛客
// 牛客与力扣一样,但是多了一个特殊情况判定,特别是如果出现了s=" "这种东西,
// 需要直接返回s,不能把空格删掉了。
// 运行时间:15ms,超过75.79%用Java提交的代码
// 占用内存:10064KB,超过98.42%用Java提交的代码
public class Solution {
    public String ReverseSentence(String s) {
		if(s == null || s.length() == 0 || s.trim().length() == 0)
            return s;
        StringBuilder res = new StringBuilder();
        for (String str : s.split(" ")) { 
            if (str.equals(" ") || str.equals(""))
                continue;
            else {
                res.insert(0, str);
                res.insert(0, " ");
            }
        }
        return res.toString().trim();
    }
}

Guess you like

Origin blog.csdn.net/fisherish/article/details/114948451
Recommended