剑指offer——翻转单词顺序列
1 题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
2 联想知识点
Java——对字符的操作:Character,String,StringBuffer,StringBuilder
3 利用栈的答案
import java.util.Stack;
public class Solution {
public String ReverseSentence(String str) {
if(str==null){
return null;
}
if(str.trim().equals("")){
return str;
}//该种情况为str为无数个空格组成,则返回的字符串为该字符串本身
String[] strs=str.split(" ");//根据给定的分割符sign对字符串进行拆分:str.split(String sign);
//Stack<String> stack=new LinkedList<String>();为错误写法,队列才需要这样!因为队列是抽象类
Stack<String> stack=new Stack<String>();
//“栈”通常是指“后进先出”(LIFO)的容器,也被称为叠加栈,因为最后“压入”站点元素,第一个“弹出”栈。
//LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。
for(int i=0;i<strs.length;i++){
stack.push(strs[i]);
}
String s="";
if(!stack.isEmpty()){
s=stack.pop();
}
while(!stack.isEmpty()){
s += " ";
s += stack.pop();
}
return s;
}
}
4 利用for循环逆序输出
public class Solution {
public String ReverseSentence(String str) {
//直接利用两个字符串解决
if(str.trim().equals("")){
return str;
}
String[] s=str.split(" ");//利用空格进行分割,并存储在字符串数组中
StringBuilder sb=new StringBuilder();
for(int i=s.length-1;i>=0;i--){//对数组从后向前读取
if(i==0){
sb.append(s[0]);
}else{
sb.append(s[i]);
sb.append(" ");
}
}
return sb.toString();
}
}
温馨提示:对字符串进行添加删除,最好可以使用StringBulider
或者SringBuffer