Github仓库地址:https://github.com/Damaer/CodeSolution 文档地址:https://damaer.github.io/CodeSolution/
给定一个句子,将句子中的单词进行翻转,注意,单词内部的字符顺序不改变,改变的是单词与单词之间的顺序,比如“I am a coder.”,翻转之后变成“coder. a am I”。
示例注意:引号内部才是输入的内容
输入
"You are a cool boy."
输出
"boy. cool a are You"
第一种方法,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();
}
【作者简介】: 秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。
- END -