题目描述
// 58. 翻转单词顺序
// 力扣
// 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
// 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a st
// udent. ",则输出"student. a am I"。
// 牛客
// 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句
// 子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看
// ,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙
// 原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat
// 对一一的翻转这些单词顺序可不在行,你能帮助他么?
题解
// 力扣
// 力扣条件比牛客宽松,不需要考虑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();
}
}