题目描述
公司最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入
“student. a am I”
返回值
“I am a student.”
思路以及解答
第一种方法,Java里面有切割字符串的方法,直接用空格进行分隔,分隔成为多个单词,然后从字符串数组的后面开始,每一个字符拼接上一个空格,但是,值得注意的一点是,当只剩下一个字符串的时候,也就是索引为0的时候,不需要再拼接空格。代码实现如下:
public class Solution {
public String ReverseSentence(String str) {
if(str!=null&&str.length()!=0&&!str.equals(" ")){
String[] strs = str.split(" ");
StringBuilder stringBuilder = new StringBuilder();
for(int i=strs.length-1;i>=0;i--){
stringBuilder.append(strs[i]);
stringBuilder.append(i==0?"":" ");
}
return stringBuilder.toString();
}
return str;
}
}
第二种方式,是借助堆栈,堆栈是先进后出,也就是我们切割完字符串之后,全部放到堆栈中,再全部取出来拼接,就可以完成逆序的操作。有一个值得注意的点,就是空格的问题,我们压栈的时候,跟随着拼接上空格即可,最后一个字符不压入空格。
public String ReverseSentence(String str) {
if (str == null || str.length() == 0)
return str;
StringBuilder stringBuilder = new StringBuilder();
String[] strs = str.split(" ");
if (strs.length == 0)
return str;
Stack<String> stack = new Stack<>();
for (int i = 0; i < strs.length - 1; i++) {
stack.push(strs[i]);
stack.push(" ");
}
stack.push(strs[strs.length - 1]);
while (!stack.isEmpty()) {
stringBuilder.append(stack.pop());
}
return stringBuilder.toString();
}
【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。